亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Android開發(fā)之又見Hello World!

系統(tǒng) 2181 0

量變產(chǎn)生質(zhì)變,如果你從第一篇一直看到了這篇,可以說這就是你的質(zhì)變點之一。

回顧及展望

經(jīng)過數(shù)篇對Android應用程序的原理的講述,現(xiàn)在我們大概回顧一下。

至此,我們終于算是完全算是雙腳步入Android開發(fā)的大門了,但我們現(xiàn)在還只能算是金字塔底端的那群人,還需要不斷地實踐、實踐、再實踐。而且上面所講的是作為一個真正Android開發(fā)人員必須要深刻理解的東西,如果您還沒有達到深刻的程度那請你 回去再瀏覽一遍 ,然后跟著我的這個系列繼續(xù)深入學習,在接下來的文章我將更多的是利用實例來解析這些東西。下面我再次用Hello World程序來分析一下Android應用程序,主要內(nèi)容如下:

  • “Hello World!”顯示淺析
  • “Hello World!”的手術(shù)(一)
  • “Hello World!”的手術(shù)(二)
  • “Hello World!”的手術(shù)(三)

1、“Hello World!”淺析

首先我們再次簡單地新建一個Hello World項目,它的布局文件res\layout\main.xml的代碼如下:
<? xml version="1.0" encoding="utf-8" ?>
< LinearLayout xmlns : android = "http://schemas.android.com/apk/res/android"
??? android : orientation = "vertical"
??? android : layout_width = "fill_parent"
??? android : layout_height = "fill_parent"
??? >
< TextView ?
??? android : layout_width = "fill_parent"
??? android : layout_height = "wrap_content"
??? android : text = "@string/hello"
??? />
</ LinearLayout >
元素<TextView>的android:text就是我們在屏幕上顯示的“Hello World, HelloWorld!”,android:text的值是 “@string/hello ”,它是如何在屏幕上顯示“Hello World, HelloWorld!” 的呢?。

在main.xml文件中以這種格式:
@[package:]string/some_name (where some_name? is the name of a specific string)
引用res/values/strings.xml文件中的字符串,其中some_name是要引用的字符串的名字。strings.xml文件代碼如下:
<? xml version="1.0" encoding="utf-8" ?>
< resources >
??? < string name = "hello" > Hello World, HelloWorld! </ string >
??? < string name = "app_name" > HelloWorld </ string >
</ resources >
由此可見,上面那個<TextView>的android:text引用的字符串是“Hello World, HelloWorld!”。接著想象一下,“Hello World, HelloWorld!”何時加載顯示的呢?

Note:這種<TextView>的text的值是存儲在strings.xml中的,而不是硬編碼的。這樣的好處是,當我們在strings.xml中修改hello的具體值時,不需要在main.xml中修改。

我們來看下src目錄下skynet.com.cnblogs.www包(就是新建Hello World項目時定義的包名)中的HelloWorld.java文件,代碼如下:
package skynet.com.cnblogs.www;

import android.app.Activity;
import android.os.Bundle;

public class HelloWorld extends Activity {
??? /** Called when the activity is first created. */
??? @Override
??? public void onCreate(Bundle savedInstanceState) {
??????? super .onCreate(savedInstanceState);
??????? setContentView(R.layout.main);
??? }
}
可以看出在創(chuàng)建活動時,即 void onCreate(Bundle saveInstanceState ) 中,在HelloWorld中重寫了它,在該方法中首先調(diào)用了父類的onCreate方法且接著調(diào)用了 setContentView(R.layout.main) 方法。是的,就是在這個方法中,根據(jù)main.xml文件將其顯示出來,因為R.layout.main是表示布局資源文件main.xml編譯后的對象,Eclipse插件會自動在R.java文件中創(chuàng)建這個引用。main.xml中定義了<TextView>,然后根據(jù)它的android:text屬性引用到strings.xml文件中的 < string name = "hello" > Hello World, HelloWorld! </ string > 元素,然后將它顯示到屏幕上。

活動的生命周期 可以知道,任何一個活動啟動的一個方法是onCreate()方法,在這里做一些初始化的工作,諸如創(chuàng)建視圖、綁定數(shù)據(jù)列表等。在HelloWorld項目中,就是調(diào)用 setContentView 進行初始化工作,將Hello World, HelloWorld!顯示到屏幕上。

至此,我們對Hello World的認識更加深入了一點!下面我們讓拿起手術(shù)刀對它進行一個手術(shù)。

2、Hello World的手術(shù)(一)

我們將main.xml文件中的<TextView>元素刪掉,取而代之用一個Button來顯示“Hello World!”。代碼如下:
<? xml version="1.0" encoding="utf-8" ?>
< LinearLayout xmlns : android = "http://schemas.android.com/apk/res/android"
??? android : orientation = "vertical"
??? android : layout_width = "fill_parent"
??? android : layout_height = "fill_parent"
??? >
< Button
android : layout_width = "fill_parent"
??? android : layout_height = "fill_parent"
??? android : text = "@string/hello"
??? />
</ LinearLayout >
其它的地方不用修改,直接運行即可!

?

圖1、修改之前的?

????????????

圖2、修改之后的

從這個例子我們可以看出我們上節(jié)的分析是對的,接下來我們繼續(xù)對它做一個手術(shù)。

3、Hello World的手術(shù)(二)

我們這次不用Button來顯示“Hello World!”,我們這次用一個圖片來顯示。首先我們準備一張png的圖片,如下: hello

圖3、hello.png

接下來我們將它復制到, res/drawable-dhpi中。然后我們查看R.java文件我們會發(fā)現(xiàn),R中自動加了一行:(關(guān)于R文件,你可以參考 Android 開發(fā)之旅:HelloWorld項目的目錄結(jié)構(gòu) 中的 1.2、gen文件夾
/* AUTO-GENERATED FILE.? DO NOT MODIFY.
*
* This class was automatically generated by the
* aapt tool from the resource data it found.? It
* should not be modified by hand.
*/


package skynet.com.cnblogs.www;

public final class R {
??? public static final class attr {
??? }
??? public static final class drawable {
??????? public static final int hello=0x7f020000;//這行是Android自動新加的
??????? public static final int icon=0x7f020001;
??? }
??? public static final class layout {
??????? public static final int main=0x7f030000;
??? }
??? public static final class string {
??????? public static final int app_name=0x7f040001;
??????? public static final int hello=0x7f040000;
??? }
}

?

drawable- hdpi、drawable- mdpi、drawable-ldpi的區(qū)別:

(1)drawable-hdpi里面存放高分辨率的圖片,如WVGA (480x800),FWVGA (480x854)

(2)drawable-mdpi里面存放中等分辨率的圖片,如HVGA (320x480)

(3)drawable-ldpi里面存放低分辨率的圖片,如QVGA (240x320)

系統(tǒng)會根據(jù)機器的分辨率來分別到這幾個文件夾里面去找對應的圖片。

?

刪除剛才我們添加的<Button>元素,添加一個<ImageView>元素。
<? xml version="1.0" encoding="utf-8" ?>
< LinearLayout xmlns : android = "http://schemas.android.com/apk/res/android"
??? android : orientation = "vertical"
??? android : layout_width = "fill_parent"
??? android : layout_height = "fill_parent"
??? >
< ImageView
android : id = "@+id/imageview"
android : layout_width = "wrap_content"
??? android : layout_height = "wrap_content"
??? android : src = "@drawable/hello"
/>
</ LinearLayout >
運行之后,結(jié)果如下所示:

hello 圖4、圖片顯示Hello World

我們看到上面的ImageView有一個id屬性。其實,每個View對象都有一個關(guān)聯(lián)的ID,來唯一標識它。當應用程序被編譯時,這個ID作為一個整數(shù)引用。但是ID通常是在布局XML文件中作為字符串分配的,在元素的id屬性。這個XML屬性對所有的View對象可用且會經(jīng)常用到。XML中的ID語法如下: android:id="@+id/my_button"

字符串前的@符號表示XML解析器應該解析和擴展剩下的ID字符串,并把它作為ID資源。+符號表示這是一個新的資源名字,它必須被創(chuàng)建且加入到我們的資源(R.java文件,R是Resource)。Android框架提供一些其他的ID資源。當引用一個Android資源ID時,你不需要+符號,但是你必須添加android包名字空間,如下: android:id="@android:id/empty"

4、Hello World的手術(shù)(三)

上面兩個手術(shù)都是基于main.xml的,在布局資源文件中聲明相應的控件并設(shè)置相關(guān)屬性,如TextView、Button、ImageView等,然后在onCreate()方法中調(diào)用 setContentView(R.layout.main) 方法來輸出。其實上面的幾個實驗我們都可以編程地進行,下面就以編程地用ImageView顯示“Hello World!”,別的也是類似來完成。

首先,我們將main.xml文件中的<ImageView>刪掉,且將res/values/strings.xml中的 < string name = "hello" > Hello World, HelloWorld! </ string > 刪掉(其實第3節(jié),用圖片顯示就沒有用到它);然后,在HelloWorld.java文件中 import android.widget.ImageView;且刪掉onCreate()方法中調(diào)用 setContentView(R.layout.main) 方法,因為我們不需要根據(jù)main.xml布局資源文件來顯示而是編程地Hello World。

接下來我們在onCreate()方法中聲明一個ImageView對象,并設(shè)置它的圖像資源,最后將這個ImageView對象傳給 setContentView() 方法,代碼如下:
package skynet.com.cnblogs.www;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageView;

public class HelloWorld extends Activity {
??? /** Called when the activity is first created. */
??? @Override
??? public void onCreate(Bundle savedInstanceState) {
??????? super .onCreate(savedInstanceState);
??????? ImageView imageHello= new ImageView( this );
??????? imageHello.setImageResource(R.drawable.hello);
??????? setContentView(imageHello);
??? }
}
運行之后,同樣會得到Hello World的手術(shù)(二)的結(jié)果,只是圖片的顯示位置不太一樣。 在這里注意上面那行粗體代碼,如果是TextView或者Button的話,應該調(diào)用setText()方法來設(shè)置”Hello World!”。

image 圖5、編程地顯示Hello World!

Note:構(gòu)建ImageView對象時傳遞了一個 this 參數(shù),表示與當前上下文(context)關(guān)聯(lián)。這個Context由系統(tǒng)處理,它提供諸如資源解析、獲取訪問數(shù)據(jù)庫和偏好等服務。因為Activity類繼承自Context,且因為你的HelloWorld類是Activity的子類,它也是一個Context。因此,你可以傳遞 this 作為你的Context給ImageView引用。

Android開發(fā)之又見Hello World!


更多文章、技術(shù)交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 超97在线观看精品国产 | 91在线品视觉盛宴免费 | 最新日韩在线观看 | 亚洲国产日韩综合久久精品 | 日本不卡中文字幕 | 久久99蜜桃精品久久久久小说 | 国产麻豆精品hdvideoss | 免费高清一级欧美片在线观看 | 久久久这里只有免费精品2018 | 日本裤袜xxxx视频 | 成人午夜亚洲影视在线观看 | 爱神马午夜 | 精品一区二区三区三区 | 国内成人精品视频 | 天天翘夜夜洗澡天天做 | 123日本不卡在线观看 | 亚洲精品不卡久久久久久 | 一级毛片子 | 黄色成人影院 | 欧美日本综合一区二区三区 | 日本中文字幕在线看 | 成熟热自由日本语亚洲人 | 日韩免费高清一级毛片在线 | 亚洲欧美日韩中文字幕在线一区 | 久久这里只有精品免费看青草 | 伊在人亚洲香蕉精品区麻豆 | 尤物精品国产福利网站 | 国产91精品一区二区视色 | 手机看片久久国产免费不卡 | 色综合手机在线 | 九九热视频精品 | 玖玖福利 | 日韩在线 | 中文 | 久久精品国产精品亚洲 | 亚洲a成人7777777久久 | 国产欧美日韩精品a在线观看高清 | 成人国产精品一级毛片了 | 欧美在线视频a | 国产成人精品综合久久久软件 | 欧洲色综合精品 | 日本特级 |