天天看點

Android開發學習筆記(一)——Android開發初體驗基本概念代碼規範XML布局從布局XML到視圖對象

基本概念

  • 活動(activity)是Android SDK中Activity類的一個執行個體,負責管理使用者與應用界面的互動。安卓應用的功能就是通過編寫Activity子類來實作的。
  • 布局(layout)定義了一系列使用者界面對象以及它們顯示在螢幕的位置。組成布局的定義儲存在XML檔案中。每個定義用來建立螢幕上的一個對象,例如按鈕和文本資訊。xml檔案存放在app/res/layout目錄下。

代碼規範

  1. 包名稱遵循“DNS反轉”約定,例如應用名稱為“myApp”,公司域名為“android.fishwong.com”。那麼包名稱為“com.fishwong.android.myApp”,包名稱無須開發者輸入,Android Studio會自動生成。
  2. 建立活動時,activity子類命名後要加Activity字尾(這不是必須的,但最好遵循規範)。
  3. 建立布局時,布局的名稱為activity子類名的單詞順序颠倒過來,并在單詞間加下劃線。例如activity名稱為“FirstActivity”,那麼此活動對應的布局為activity_first。

XML布局

XML代碼及其視圖層級結構

Android開發學習筆記(一)——Android開發初體驗基本概念代碼規範XML布局從布局XML到視圖對象

上述XML代碼的實際顯示效果如下圖,可以通過點選代碼編輯區右邊的Preview進行預覽。

Android開發學習筆記(一)——Android開發初體驗基本概念代碼規範XML布局從布局XML到視圖對象

以上的XML代碼可以看成下面的視圖層級結構

Android開發學習筆記(一)——Android開發初體驗基本概念代碼規範XML布局從布局XML到視圖對象
  • LinearLayout元件繼承自ViewGroup元件(也是一個View子類)。ViewGroup元件是包含并配置其他元件的特殊元件。LinearLayout可以以一列或者一排的方式布置元件,其他ViewGroup元件還有FrameLayout、TableLayout、RelativeLayout等。
  • 若某個元件包含在一個ViewGroup中,該元件與ViewGroup構成父子關系。從圖1-11容易看出,根LinearLayout有兩個子元件,TextView和另一個LinearLayout。作為子元件的LinearLayout,有兩個Button(按鈕)子元件

XML元件屬性

XML中配置元件的一些常用屬性如下

1.android:layout_width和android:layout_height屬性

幾乎所有元件都需要這兩個屬性,該屬性定義了元件的大小。它們有兩個常用的屬性值:

  • match_parent:視圖與父視圖的大小相同
  • wrap_content:視圖将根據其顯示的内容自動調整大小

根LinearLayout的高度和寬度屬性值均設定為match_parent,根元素的父視圖由Android提供,該父視圖容納應用的整個視圖層級結構

2.android:orientation屬性

上述的XML代碼中的兩個LinearLayout都有這個屬性,android:orientation屬性有兩個屬性值

  • horizontal:水準
  • vertical:垂直

它決定二者的子元件是水準放置或者垂直放置。在上述例子中,根LinearLayout是垂直的,而子LinearLayout是水準的。

3.android:text屬性

TextView和Button元件具有該屬性,這個屬性指定元件要顯示的文字内容。

注意!!android:text屬性值并不是字元串值,而是對字元串資源(string resource)的引用。

字元串資源包含在一個獨立的XML檔案strings.xml中,我們設定該屬性值的做法是:将文字内容放置在獨立的字元串資源XML檔案中,然後引用它們。

建立字元串資源

每個項目都包含一個預設的字元串資源檔案(strings.xml),該檔案在app/res/values目錄下。我們可以在這個檔案中添加字元串資源,添加的格式為:

<string name="字元串的名字">字元串的内容</string>

注意string子元素應該在resources根元素下,字元串資源xml檔案可以根據自己的喜好命名,一個項目也可以有多個字元串資源檔案。

當需要引用字元串資源的時候,引用方法如下:

android:text="@string/字元串的名字"

從布局XML到視圖對象

上述XML元素通過一個名叫QuizActivity的Activity子類轉換為視圖對象,類檔案存放在app/java目錄下,這是項目全部Java源代碼存放的地方

Android開發學習筆記(一)——Android開發初體驗基本概念代碼規範XML布局從布局XML到視圖對象

QuizActivity類繼承于AppCompatActivity(實際上就是一個Activity子類,能為舊版本系統提供相容支援)。這個類中有一個onCreate(Bundle)方法,這個方法将在activity子類的執行個體建立後被調用,activity建立後,需要擷取并管理使用者界面,可以調用這個Activity方法:

public void setContentView(int layoutResID)
           

資源與資源ID

項目有很多資源,布局是一種資源。圖像檔案、音頻檔案、XML檔案都是資源。項目的資源檔案全部存放在app/res下。我們可以使用資源ID在代碼中擷取相應的資源,activity_quiz.xml布局的資源ID為R.layout.activity_quiz。

檢視應用的資源ID需要切換到Project視圖,R.java檔案儲存在app/build/generated/source/r/debug目錄下,該檔案在Android項目編譯過程中自動生成,但不會實時重新整理,隻有在運作了App後,它才會得到更新。

為元件添加資源ID的方法很簡單,隻要在XML檔案中給對應的元件添加上android:id屬性即可。下圖展示了如何為一個按鈕添加資源ID。

Android開發學習筆記(一)——Android開發初體驗基本概念代碼規範XML布局從布局XML到視圖對象

注意,android:id屬性值前面有一個+号,而android:text屬性值則沒有,這是因為我們在建立資源ID,而對字元串資源隻是作為一個引用。

元件的實際應用

添加成員變量

當元件有了資源ID,就可以在QuizActivity中直接擷取它們,首先我們要在QuizActivity.java檔案中添加兩個成員變量。

Android開發學習筆記(一)——Android開發初體驗基本概念代碼規範XML布局從布局XML到視圖對象

注意,兩個變量名稱的m字首是Android程式設計中應遵循的命名規範。

如果Android Studio出現錯誤資訊:Cannot resolve symbol 'Button',那我們需要在檔案中導入android.widget.Button類包,導入方法如下

import android.widget.Button;
           

或者可以使用Alt+Enter讓Android Studio自動導入類包,代碼有錯誤時可以使用該組合鍵修正!

引用元件

定義好變量後,我們開始引用元件了,這個過程使用到了以下方法

public View findViewById(int id)
           

該方法以元件的資源ID作為參數,傳回一個視圖對象,我們将這個對象指派給對應的成員變量,指派前注意要将傳回的View類型轉換為對應的對象,在這裡為Button,代碼如下

mTrueButton = (Button) findViewById(R.id.true_button);
mFalseButton = (Button) findViewById(R.id.false_button);
           

設定監聽器

監聽器(listener)即為響應某個時間而建立的對象。Android SDK已經為我們内置了很多監聽器的接口,目前應用需要監聽使用者“點選”按鈕的事件,是以我們需要實作View.OnClickListener接口,實作方法如下:

Android開發學習筆記(一)——Android開發初體驗基本概念代碼規範XML布局從布局XML到視圖對象

當mTrueButton按鈕被點選後,監聽器會立刻通知我們,傳入setOnClickListener(OnClickListener)方法的參數就是一個監聽器,在這裡,一個匿名内部類(anonymous inner class)實作了OnClickListener接口。使用匿名内部類的兩大好處:

  • 可以相對集中地實作監聽器方法,一眼可見
  • 事件監聽器一般隻在一個地方使用,使用匿名内部類可以避免建立繁瑣的命名類

建立提示消息Toast

首先,我們為toast添加消息顯示用的字元串資源(略)。然後,我們調用Toast類方法建立toast

public static Toast makeText(Context context, int resId, int duration)
           

該方法的參數解釋如下:

  • 第一個Context參數通常是Activity的一個執行個體(Activity本身就是Context的子類)
  • 第二個參數是toast要顯示字元串消息的資源ID
  • 第三個參數用來指定toast消息的停留時間,通常是兩個Toast常量中的一個,Toast.LENGTH_SHORT和Toast.LENGTH_LONG

部分代碼如下:

Android開發學習筆記(一)——Android開發初體驗基本概念代碼規範XML布局從布局XML到視圖對象

現在我們就可以嘗試打開模拟器運作App了,如果在運作過程中App崩潰,我們可以在LogCat視圖中檢視所有的報錯資訊(Android Stuidio底部)

文章内容出自《Android程式設計權威指南》(第3版)

内容經過删改處理,僅作為學習用途

如有侵權,聯系删除

2021/06/05