Android開發之創建你的第一個應用(翻譯自谷歌官方,原版翻譯)

古人說的好:工欲善其事,必先利其器!首先是要搭建安卓的開發環境,這裏提供一個哥們寫的地址:http://www.hzlitai.com.cn/article/ARM11/SYSTEM/android.html 網上也有很多,推薦eclipse,畢竟這個也是谷歌官方推薦的。

看過一些android開發的書籍,總覺得中文的書籍重其形,而不重其意,很多時候都是指講了怎麼做,沒有講爲什麼,而且谷歌的更新是很快的,而我們看的書還是真對2.3的版本寫的,所以我想把谷歌的官方的東西搬到這裏來,當然能看懂英文是最好的,但是很多時候也許有些同學看英文會覺得很麻煩,畢竟沒有母語親切,我想把谷歌官方的培訓資料寫到這裏,幫助大家一起進步。至少在我在android上已經摸索了很久的時候,回頭看谷歌的官方培訓資料,發現還是能收穫很多新的東西,也許是我比較愚笨,覺得中文的書籍經過作者自己的排版寫出來,真的丟失了很多重要的東西,很多地方講的很空洞,所以很多時候我會覺得我一直在記憶代碼,而不是自己寫代碼,因爲我不知道我寫這一句會和系統有什麼關係,只是知道該這麼寫,這種感覺真的太糟糕了。

呵呵,上面都是題外話了,下面開始,我會努力每天寫點,寫完的,可能剛開始的都很基礎,但希望一些細節對大家有用。

這篇是最基礎的,如何開始創建你的第一個應用程序。谷歌官方地址:http://developer.android.com/training/basics/firstapp/index.html

在Eclipse下創建你的第一個Android項目

1.點擊New菜單

 

2.在打開的頁面裏面選擇Android,選擇裏面的Android Application Project

3.然後會打開一個頁面,填充裏面的內容:

 Application Name:顯示給用戶的這個app的名字,就是在我們說的看到的應用程序的名字

 Project Name:在eclipse裏面顯示的項目名稱

 Package Name:應用程序的包名,這個命名貫穿你的整合程序,和java裏面的規則是一直的,像上圖我們填寫的。因爲這個原因,所以最好寫成這個app代表的領域或者你的公司的名字,用點號隔開來寫。這個應用裏面是 com.example.myfirstapp,那像GooglePlay提交的時候你也必須使用這個,而不是com.example

 Minimum Required SDK:你的APP所支持的最小的API 版本號(不是android的系統好,比方說4.0的系統對於的API 號爲14),所以爲了支持最多的設備,這個值要努力設置到最小,就是在能夠支撐你的應用的最小的API版本,再小的話可能你的應用一些核心功能就會異常,要保證你的應用在這個最小的版本號上正常運行。如果你的APP的功能只能在當前的版本,那麼這個值可以不填,會默認爲當前的項目的編譯版本號,這個版本號和Compile With一致

 Target SDK:這個版本號指明你的程序支持的最高版本號,你需要在這個版本好的機器上測試你的程序,保證正常運行。那麼當android有新的版本發佈的時候,你需要去更新這個新版本對於的SDK版本號,好讓的你的程序更好的利用新版本的特性

 Compile With:這個裏面指定的版本號你編譯你的項目時使用的SDK版本。一般默認設置爲最新可用的版本號,可以理解爲設置爲Target SDK一樣。當然你也可以使用舊點的版本來編譯,但是一般設置爲最新的版本號,可以讓你的程序使用新的特性,並且能使你的程序在新的平臺上達到最優化,畢竟新平臺會改進很多東西

 4.點擊next後,顯示的是關於你的應用的一些配置,默認就好,繼續點擊下一步

5.點擊了下一步後,這一步會幫助你選擇一張圖片作爲你的應用程序圖標,在發佈你的APP之前,你可以去定做一些圖片,但是切記:圖片要符合android Iconography 設計的要求。點擊下一步

6.這一步你要選擇一個Acitivty模版,這個是你APP啓動的第一個Activity,點擊下一步

7.這一步所有的屬性都不要,默認就好,點擊Finish。

這個時候你的第一個APP的Android Project就創建成功了。

運行你的APP

 前面我們創建的程序默認就包括有一個顯示“hello world”所需要的文件資源,那麼現在要把它跑起來,它只需要兩件東西:你是否有一部可以使用的Android設備,真機也好,虛擬機也好,以及你是否在使用eclipse.下面我們就來說下如何安裝和運行這個APP在你的真機或者虛擬機上,包括使用eclipse和命令行2種方式。

在運行你的APP之前,首先要明白你的項目裏面的一些需要注意的方面和一些文件:

AndroidManifest.xml

manifest fill裏面描述了這個APP基本的特性,還定義了組成這個APP的組件。續的文章中我們還會學到關於這個文件很多知識,這裏先不一一介紹。

其中一個最要的,必須寫在這個文件裏面的屬性就是:<uses-sdk>屬性。這個屬性裏面使用android:minSdkVersion 和 android:targetSdkVersion描述你的應用對不同android設備的兼容性,大家也注意到了,這個就是我們上面說的Minimum Required SDK和Target SDK。對於我們創建的這個APP,它的數值應該是這樣的:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />
    ...
</manifest>
src/

你的項目的主要代碼文件目錄,默認它包含你的程序的啓動時運行的第一個Activity 類

res/

這個目錄是你項目的資源文件存放的目錄,它下面又有一些子目錄。

drawable-hdpi/ 這個裏面存放的是針對高分辨率屏幕的圖片資源,比方說bitmap圖片等等。那還有其他類似目錄,分別存放針對各自對於的分辨率的資源文件。

layout/ 存放你的APP的界面文件

values/ 存放一些XML文件,這類文件裏面包含的資源有:string,color等等。

當我們運行這個默認程序的時候,默認的Activity類會載入一個默認的layout的文件,最後顯示到設備屏幕上一個“hello world”,結果確實沒啥可激動的,但是這一步很重要,在你開發之前,你至少明白瞭如何運行的你APP。

在真機上運行你的APP

首先你得有有一臺充電的android設備,那麼就可以進行如下的操作了:

1.用USB線把設備連接到你的開發電腦上,如果是windows設備,你需要安裝一下對於的USB驅動,一般windows默認就可以搜索到,只需要等待就好。

2.打開你的手機上的USB debugging功能。

  大部分的3.2版本或者更低的版本上,這個功能位於:Settings > Applications > Development.

   4.0或者更新的版本上,這個功能位於:Settings > Developer options.

  要注意一點:4.2或者之後的版本,這個Developer options默認是隱藏的,讓這個模塊可見,可以如下操作:Settings > About phone,然後點擊Build number 七次,返回前一個界面,就能看到了.

現在要運行你的APP了

1.打開你的項目,點擊Run 這個按鈕

2.會出現一個窗口,選擇Android Application,然後點擊OK

eclipse會自己安裝這個APP到你的機器上,並運行它。

也可以用命令行:

1.定位到你的項目的跟目錄,運行命令

ant debug

2. 先保證platform-tools/目錄在你的環境變量:path中,保證adb可以被識別

adb install bin/MyFirstApp-debug.apk

3.在你的設備上找到這個APP的圖標,點擊運行。

 

或者沒有真機的話,可以使用模擬器。點擊:設備管理器可以創建一個模擬器,這個是創建界面:

當裏面沒有模擬器的時候我們可以點擊New來創建。  

創建好之後,我們可以點擊start來啓動這個模擬器來模擬我們的android設備。

後面運行的步驟就和之前一樣了,可以點擊run按鈕,模擬器默認的usb debugging功能是開啓的。

那麼現在我們已經知道如何運行我們的APP到真機,以及沒有真機的情況下,如何創建一個模擬器來代替。下來我們可以進行開發工作的學習。

創建一個簡單的用戶界面

Android app中的圖形用戶界面是利用View和ViewGroup的層次結構視圖來創建。View指的是通常的UI組件,比方說button,text field.ViewGroup是不可見的,它是用來定義它裏面的子視圖如何來排列,分佈,比方說是網格還是垂直的形式。

Android 提供了XML詞彙表來對於View和ViewGroup的子類,這樣你就可以在xml利用UI元素的層次感來創建你的UI界面

圖列說明下ViewGroup是如何包含組織View的:

下來我們會創建XML文件,裏面包含有一個button和一個text field,以及按鈕按下時啓動一個activity,並且把text field裏面的文字傳給這個啓動的activity。

創建一個線性佈局文件(LinearLayout)

首先雙擊我們打開我們創建的項目裏面的:activity_main.xml文件,它在/res/layout/目錄下。

這裏要注意下:Eclipse裏面,當我們雙擊打開layout xml文件的時候,默認展示給你的是一個圖形編輯界面,在這個界面裏面我們可以直接拖動空間來創建我們的用戶界面,但是這個永遠不是最好的方式。我們這裏需要直接去編輯xml文件,而不是依靠這個圖形編輯界面,所以點擊activity_main.xml這個文件下面的tab,選擇到XML editor,直接進入xml編輯器。

我們創建的時候默認選擇的BlankAcitivity模版,他包含了activity_main.xml文件,文件裏面默認有一個RelativeLayout根視圖和一個TextView子視圖。

首先,刪除掉<TextView>元素,同時把RelativeLayout修改爲LinearLayout,同時爲修改後的LinerLayout添加一個android:orientation屬性,設置爲“horizontal”。經過上面的修改,現在activity_main.xml文件看起來應該是這樣的:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
</LinearLayout>


LinearLayout是ViewGroup的一個子類,它會把包含在它裏面的子視圖元素按照垂直或者水平的方式列出來,這個就是所說的線性佈局,排列的方向是由:android:orientation指定的,裏面的每一個子視圖元素都是安裝這個指定的順序排列的。

 屬性android:layout_width和android:layout_height是所有的視圖組件到需要的,這個2個屬性分別定義了該視圖的寬度和長度

我們這個例子裏面,LinearLayout是根視圖,這裏我們讓這個視圖佔滿整個屏幕,用mactch_parent來指導,這個值會讓這個視圖的寬度和高度和它的父視圖的寬度和高度一樣,像這裏,我們定義的這個LinearLayout是根視圖,那他就會填充滿整個屏幕,它的寬度和高度會等於屏幕的寬度和高度。

增加一個文本框(Text Field)

下來我們添加一個用戶可編輯的文本輸入框,對於的視圖元素是<EditText>,我們只需要在我們的LinearLayout這個ViewGroup裏面加入它即可。像上面說的LinearLayout這個跟視圖一樣,EditText我們也填充入相應的屬性。

<EditText android:id="@+id/edit_message"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:hint="@string/edit_message" />

關於這些屬性:

android:id 這個是對EditText這個View唯一的標示符,我們利用這個標示符在代碼中使用這個View,可以獲取它輸入的內容,或者改變它的內容等一系列針對它的操作。

對於@這個符號,對於會在代碼中使用的XML涉及到的任何(視圖)資源都是需要的,利用@,後面加上(視圖)資源類型(這個例子中是:id),然後斜槓,後面加上這個(視圖)資源的名字。 這個地方的理解挺繞的,貼下英文(有時候真的英文好理解,中文就是個繞,無奈):

The at sign (@) is required when you're referring to any resource object from XML. It is followed by the resource type (id in this case), a slash, then the resource name (edit_message).

其中@符號後面的+號,只有在第一次定義這個資源名稱的時候,才需要添加,後面其他地方使用這個資源名稱的時候,不需要這個加號,也很好理解,就是添加一個新的資源名稱。然你編譯你的APP的時候,SDK TOOLS會利用這個ID名字,在gen/R.java文件裏面生成一個與之對應的資源ID號,這裏就不用我們管了,我們在代碼中使用的時候,就我們添加的那個資源名稱就好。

android:layout_width和android:layout_height這2個屬性,在這裏,我們並沒有用match_parent,而是用了wrap_content,這個屬性會讓系統根據需要來自動調整這個EditText的小小,自動適應裏面內容的大小。如果我們這裏改成match_parent,那麼這個 EditText的大小就會和LinearLayout的大小一樣,因爲EditText是定義在LinearLaout裏面的,所以LinearLaout就是EditText的父視圖。

android:hint 這個制定了當EditText爲空的時候,裏面默認顯示的內容。這裏我們直接讓它等於某個字符串,而是使用了@string/edit_message這個資源名稱,這個表示它的值是爲:string類型的值edit_message ,edit_message就是被定義到某個資源文件裏面的資源名稱,它的類型是string,因爲這裏是引用,所以我們不需要+號。這裏會默認報錯,我們先不管,後面我們會加上這個資源添加過程。

在這裏要注意:在使用資源名稱的時候,都有一個類型在前面限制,比方說string和id,這就是2中不同的類型, 所以當我們分別用同一個資源名字定義了string類型和id類型2個資源的時候,並不會產生衝突,因爲使用的時候我們會加入資源類型的符號,比如:@string/資源名稱,@id/資源名稱。

添加string資源

當我們在視圖界面裏面加入一個字符串文本的時候,這個時候我們就要用到string資源了。就像上面的@string/edit_message,這裏我們用的就是edit_message這個string資源.

默認的定義string資源的文件位於:res/values/strings.xm。我們添加一個新的string類型的資源叫:edit_message,設置它的值爲:Enter a message(你可以把hello_world這個字符串資源刪除掉,因爲我們用不到)

這裏我們順便再添加一個值爲“Send”的的string資源,名稱爲:button_send.最好的結果應該是這樣:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">My First App</string>
    <string name="edit_message">Enter a message</string>
    <string name="button_send">Send</string>
    <string name="menu_settings">Settings</string>
    <string name="title_activity_main">MainActivity</string>
</resources>


添加一個按鈕(Button)

我們在LinerLayout裏面添加一個<Button>元素,就在XML文件中<EditText>的下面:

<Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_send" />


高度和寬度都設置爲"wrap_content",button我們只需要讓它的大小和它需要的一致就好,讓系統自動就計算。在這裏我們並沒有給它添加一個android_id,因爲現在我們並不需要在代碼中使用這個按鈕,所以不需要一個id號來識別它。

讓輸入框佔滿屏幕的寬度

現在我們添加的EditText 和 Button都是自動適應的,系統根據需要來自己計算,因爲我們都使用wrap_content來指定他們的寬度和高度。

這樣設置,button倒是沒什麼,但是文本輸入框就會有問題了。因爲可能用戶會輸入很長的內容,這個時候最好的做法就是,讓這個EditText佔滿屏幕剩餘可用的寬度,在這裏就是除去button的寬度外,屏幕剩餘的寬度。那我們這裏就用到一個wight屬性,用android:layout_weight來指定。這個屬性定義處於同一父視圖下的每個view對父視圖剩餘屏幕空間的佔有大小。它的工作原理就好比說有一杯果汁,這個裝果汁的杯子就是父視圖,裏面的檸檬佔據了三分之二的空間,蘋果佔據了三分之一的空間,那麼這個時候檸檬的weight的數值就是2,蘋果是1,總共劃分爲3份,那如果我們這杯果汁裏面還有番茄汁的weight爲1,那麼總的weight就變成4了,檸檬站一半,蘋果佔據四分之一,番茄佔據四分之一。

默認的 wight都是0,所以如果你給一個view設置了一個比0的數值,那麼這view就會佔滿除了其他的視圖已經分配出去的空間,把剩餘的全部佔據。所以這裏我們只需要把EditText的weight設置爲1,Button的默認爲0,那edittext就會佔據除了button使用的剩下的所有空間。

<EditText
        android:layout_weight="1"
        ... />


爲了提高佈局的效率,當你設置了weight屬性,那麼最好將width這個屬性設置爲0dp,因爲wrap_content需要系統去計算這個最終無用的寬度,因爲weight值需要系統去進行另一種計算來填充佔滿剩餘的空間。

<EditText
       android:layout_weight="1"
       android:layout_width="0dp"
       ... />


最終顯示的頁面是這樣的:

  

那現在我們的佈局文件內容應該如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    <EditText android:id="@+id/edit_message"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:hint="@string/edit_message" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_send" />
</LinearLayout>


我們可以點擊Run來運行看看.

啓動另外一個Activity  

上面我們已經在我們的APP裏面添加了一個按鈕和輸入框,下來我們看下如果點擊按鈕啓動另外一個actvity

首先我們要讓添加的按鈕在點擊的時候會進行反應,打開我們的之前的佈局文件activity_main.xml,爲<Button>這個視圖元素添加一個屬性:android:onClick

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button_send"
    android:onClick="sendMessage" />


sendMessage就是當我們點擊按鈕的時候,會被執行的你的Activity中的函數。

我們打開MainActivity.java,添加該函數:

/** Called when the user clicks the Send button */
public void sendMessage(View view) {
    // Do something in response to button
}


這裏需要插入View這個類

import android.view.View;


注意:在eclipse,我們可以使用Ctrl+shift_O 快速完成這個動作(以前我傻逼的一個一個點~~⊙﹏⊙b汗),Mac裏面用:Cmd+Shift+O

爲了讓系統可以識別匹配到android:onClick指定的這個函數,這個函數的定義有下面幾規則:

必須是public類型

返回值是void類型

參數是一個View變量,到時候傳進來的就是被點擊的那個View,button是View的子類。

下來,我們就在這個函數裏面實現如何啓動另外一個Activity,並且把EditText的數值傳過去。

創建一個Intent

Intent提供了一種把2個互相獨立的組件,在運行時聯繫在一起的機制。Intent可以理解爲你的APP意圖想要去做的一件事情。可以利用Intent可以進行很多種不同的任務。但最常用的是,我們利用它來啓動另外一個Activity.  

在sendMessage函數裏面,我們創建一個Intent來啓動另外一個Activity:DisplayMessageActivity:

Intent intent = new Intent(this, DisplayMessageActivity.class);


Intent的構造函數有2個參數:

Context是第一個參數(this使用在這裏是因爲Activity是Context的子類)

注意:這裏暫時會報錯,因爲我們沒有創建DisplayMessageActivity.java這文件,下面我們很快就會去創建

Intent除了可以啓動activity,它還可以攜帶一些數據。在這個發放裏面,我們使用findViewById()這個函數找到EditText這個視圖元素,然後把它的內容存放到Intent裏面

Intent intent = new Intent(this, DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.edit_message);
String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);


注意:我們要插入包android.content.Intent and android.widget.EditText,等下還要定義EXTRA_MESSAGE這個值。

一個Intent可以攜帶一些鍵值對這種數據,我們稱之爲extras.我們使用  putExtra() 函數來存儲要攜帶的鍵值對,第一個參數是這個鍵值對的名字,第二個參數是這個對於的數值。

爲了讓第二個activity可以一句鍵值對的名稱來獲取對應的值,那我們需要把EXTRA_MESSAGE設置一個公有的靜態常量。我們可以在MainAcitivty裏面添加它、

public class MainActivityextends Activity {
    public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
    ...
}


做好的辦法是使用包名作爲你的這中鍵值對名稱的前綴,這樣可以確保這個名稱的唯一性,防止你的APP需要和其他的APP進行數據交互是產生共名的問題。 

啓動另外一個Activitiy

使用startActivity函數來啓動一個activity,把你的intent作爲參數傳遞給它。系統接受到這個請求後,會其啓動intent指定的activity.現在我們這個函數的代碼應該是下面這個樣子: 

/** Called when the user clicks the Send button */
public void sendMessage(View view) {
    Intent intent = new Intent(this, DisplayMessageActivity.class);
    EditText editText = (EditText) findViewById(R.id.edit_message);
    String message = editText.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, message);
    startActivity(intent);
}


那麼現在我們來創建一下DisplayMessageActivity類。

創建第二個Acitivity類:DisplayMessageActivity

1.點擊New 

2.在出現的窗口中選擇Android,選擇Android Acitivty,點擊下一步

3.選擇BlankActivity,點擊下一步

4.填充這個表格屬性:如圖所示

完成後,點擊Finish

這個時候我們已經在創建了DisplayMessageActivity.java文件,打開它,我們會發現裏面已經自己生產了一些函數。

實現了onCreate()函數

實現了onCreateOptionMenu函數,但是我們用不到在這裏,刪除掉即可。

實現了onOptionsItemSelect函數,處理導航按鍵(action bar)按下的這個動作。保留即可。

因爲Actionbar僅僅在HONEYCOMA(API版本號11)以及之上的android設備才支持,所以你必須在getActionBar()這個函數這裏添加一個來判斷當前允許的android版本號的條件。此外,你必須添加標示:@SuppressLint("NewApi")這個標籤在調用getActionBar的onCreate函數上,防止lint錯誤。這裏就知道這個是一種錯誤就OK,後面我們會講解,就暫時理解爲android的一種檢測工具,檢測android代碼潛在的錯誤。

現在我們的這個DisplayMessageActivit.java應該已經是下面這個樣子了:

public class DisplayMessageActivityextends Activity {
 
    @SuppressLint("NewApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_display_message);
 
        // Make sure we're running on Honeycomb or higher to use ActionBar APIs
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            // Show the Up button in the action bar.
            getActionBar().setDisplayHomeAsUpEnabled(true);
        }
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            NavUtils.navigateUpFromSameTask(this);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}


這裏注意:每個Activity的子類,必須要實現onCreate函數,這裏是eclipse自動爲我們生成了,系統調用這個函數來創建我們這個Activity的實例。 

在這個函數裏,你還有一個要必須來調用執行的函數是:setContentView()方法,這個方法來設置這個activity的顯示界面。

還有一些對這個activity的初始化動作,也在這個函數裏面執行,但是記住:耗時的初始化動作在這裏執行的時候,要開啓獨立的線程來處理,否則會導致程序無響應。

現在這裏如果是非eclipse創建的,應該會報錯,因爲你的項目並沒有一個名字叫做activity_display_message的佈局文件,沒關係,先不管,因爲我們並沒有打算用佈局文件來設置界面,我們只是想要顯示一段文字而已,我們用代碼簡單的創建一個View,用它來做參數就可以了,把這個View作爲顯示界面。 但是我們這裏不會報錯,因爲eclipse已經爲我們創建了這個文件,但是我們依然沒打算用它

增加一個T標題字符串

在這裏,eclipse自動爲我們添加了相應string資源,如果開發工具沒有自動添加,那就需要我們手動去添加了:

<resources>
    ...
    <string name="title_activity_display_message">My Message</string>
</resources>


添加這個Acitivity到Manifest文件,上面我們說過,Manifest文件裏面聲明瞭我們APP的組成成員,包括所有的activity

我們使用eclipse創建的時候,它已經默認添加了,不然的話,需要手動去添加

<application ... >
    ...
    <activity
        android:name="com.example.myfirstapp.DisplayMessageActivity"
        android:label="@string/title_activity_display_message"
        android:parentActivityName="com.example.myfirstapp.MainActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.myfirstapp.MainActivity" />
    </activity>
</application>


android:parentActivityName 指明瞭在邏輯上DisplayMessageActivity的父Activity.系統利用這個值來完成默認的導航動作,比方說返回上級的導航(僅僅才4.1系統或者之後的系統.對於之前的版本,我們可以使用 Support Library ,添加一個<meta-data>元素,像上面所寫。當我們使用eclipse默認activity模板的時候,Support Library是默認添加的,否則就需要手動去添加了。這個庫主要是用來支持舊的版本。有時間再細說這個東西,大家也可以去網上自己查

接受intent傳遞過來的信息 

每個Acitivity默認的關聯着一個Intent,不管我們是否使用到它。你可以使用getIntent()函數來獲取啓動你當前Activity的那個Intent,然後就可以獲取到當時存儲到這個啓動你這個Acitivty的Intent裏面的信息。
在這裏,我們在onCreate抽取這個信息。

Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);


顯示信息  

爲了顯示這個信息,我們需要創建一個TextView來顯示,使用TextView的setText方法來設置它的內容,然後用setContentView把這個TextView作爲當前activity的根視圖顯示到屏幕  

完善onCreate該函數如下:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
 
    // Get the message from the intent
    Intent intent = getIntent();
    String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
 
    // Create the text view
    TextView textView = new TextView(this);
    textView.setTextSize(40);
    textView.setText(message);
 
    // Set the text view as the activity layout
    setContentView(textView);
}


這個時候運行我們的APP,點擊按鈕,我們啓動的第二個activity會顯示一個activity編輯框裏面的內容。

到這裏,我們的第一個應用程序就創建完成了。

1.我們學會了基本的UI

2.我們學會了一個Activity的重要函數onCreate

3.我們學會了如何用Intent啓動另外一個Acitivity,並且怎麼把數據傳過去

4.我們學會了如何用佈局文件,或者代碼,來創建一個activity的用戶界面顯示,並利用setContentView 來設置

5.我們學會了如果簡單的添加資源

6.我們學會了一個項目的創建,和單個activity的創建

7.我們學會了導航按鍵的創建

8.我們學會了manifest文件如果填寫裏面的相關屬性,比方說sdk版本號,activity的聲明,導航的聲明屬性等等

 有問題歡迎大家批評,指正,不是專業寫手,多多諒解,不懂的地方大家可以對着英文看下。共同進步!

 

發佈了35 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章