Android官方开发文档Training系列课程中文版:构建第一款安卓应用之创建用户界面
原文地址:http://android.xsoftlab.net/training/basics/firstapp/building-ui.html
在這節課中,你會創建一個xml的布局文件,它包含一個Text成員和一個Button成員。在下節課中,你會學習到當Button按下后啟動并發送Text成員的內容到另一個Activity中。
安卓應用的靈活用戶界面是建立在View和ViewGroup的層級基礎之上。View是比如Button或者TextView這種通用的UI控件,ViewGroup是一種不可見的布局容器,它定義了子View該如何被放置,比如放置在Grid或者垂直的列表中。
布局都是ViewGroup的子類,在這個練習中,我們使用LinearLayout做演示。
創建一個線性布局
當你在創建這個工程的時候你選擇了一個空白的Activity模板,這個工程包含一個activity_my.xml文件,文件中有一個RelativeLayout根View和一個TextView子View。
res/layout/activity_my.xml
LinearLayout是一個ViewGroup,它是ViewGroup的子類,它可以通過屬性android:orientation布置子View為垂直排列或者水平排列。每一個LinearLayout的子View都會按照在XML文件中的順序方式顯示在屏幕上。
有兩個屬性:android:layout_width 和 android:layout_height,對于所有的View的尺寸來說是必須的。
因為LinearLayout是布局的根目錄,它應該會填充屏幕的整塊區域,因為在寬和高的屬性中設置了”match_parent”,這個值表明了這個View應該擴展它的寬或者高到父View的高寬。
添加一個Text屬性
正如每一個View對象一樣,你必須在XML文件中聲明EditText對象的屬性。
1. 在activity_my.xml文件的< LinearLayout >的元素中,定義一個< EditText >的元素,并且設置它的id屬性為@+id/edit_message。
2. 設置layout_width和layout_height屬性為wrap_content。
3. 定義hint屬性為一個名稱為edit_message的字符串。
< EditText >元素應該是這樣的:
res/layout/activity_my.xml
以下是你添加的< EditText >的屬性介紹:
android:id
- 這個提供了View的唯一標識符,你可以從應用代碼中使用這個對象的引用,比如用來讀取并且操作這個對象。
- 符號@在xml中引用任何資源對象的時候是必須的。緊接著后面跟的是資源的類型,在這里是id,再最后是資源的名稱,這里是edit_message。
- 在資源類型前的符號+是指當你第一次要指定一個資源ID。當你編譯APP的時候,SDK工具會使用這個ID的名稱在工程的gen/R.java文件中創建一個新的資源ID的引用,這個引用表示的就是XML中的EditText對象。如果使用這種方式聲明了ID,那么在后面就不需要再使用+,其它地方引用的時候也不需要+。
android:layout_width 和 android:layout_height
- 用來指定高寬的尺寸,”wrap_content”是指View應該根據它內容的多少來指定它的大小。如果你想使用 “match_parent”,那么EditText元素將會填充整個屏幕,因為它會擴展到父布局LinearLayout的大小。
android:hint
- 這個屬性用來在Text中內容為空的時候展示,為了不使用硬編碼的字符串,這里使用了@string/edit_message的值引用另一個文件中的一個字符串資源。這里不需要使用+標志,然而,因為你還沒有指定一個字符串資源,你將會在編譯的時候看到錯誤,你將會在下面定義了字符串資源后修復這個錯誤。
Note: 這里的字符串資源命名和EditText元素的名稱一樣,但是,它們屬于不同的資源類型,一個是string,一個是id,所以使用相同的名稱并無大礙。
添加一個字符串資源
默認情況下,在工程的res/values/下的strings.xml文件便是字符串資源文件了。這里,你將會添加一個名為”edit_message”的字符串然后設置其值為”Enter a message.”
1. 在AS中,在res/values目錄下打開string.xml
2. 添加一行名為”edit_message”值為”Enter a message.”的字符串資源
3. 添加一行名為”button_send”值為“Send”的字符串資源。
4. 移除”hello world”那一行。
那么strings.xml應該就是這樣的:
在用戶界面上的文字,總是要指定每一個資源。字符串資源允許你管理所有的UI文字,它可以使你更輕松的找到和更新文字。外部化存儲的字符串資源允許你去簡單定義不同的語言版本app
添加一個按鈕
你的< LinearLayout >應該看起來像這樣:
res/layout/activity_my.xml
Note: 這里不需要給Button指定android:id屬性,因為這里不需要在Activity代碼中使用Button的引用。
現在這個布局文件顯示的應該是這個樣子:
這下按鈕就可以工作了,但是和text不同,text稍后會被用戶輸入一些東西,它便會很好的填充屏幕上沒有使用的空間。你可以使用LinearLayout的權重屬性做到這一點,可以使用android:layout_weight來指定權重。
如果所有的weight值都是0,那么如果你在其中一個View中指定任何比0大的值,那么這個View將會把剩下的空余空間全部占滿。
使輸入框填充屏幕的寬度
如果需要使EditText占據屏幕上的剩余空間,那么只需要做到以下幾點:
1. 在EditText的屬性中添加layout_weight,并設置值為1。
2. 另外,EditText的layout_width屬性可以設置為0dp:
3 . 當指定了權重會影響布局效果,應該把EditText的寬設置為0,因為使用了wrap_content的話會要求系統計算一次不必要的寬度,因為權重會要求系統進行重新計算并使用剩余的寬度。
以下就是使用了權重的效果:
以下是修改好的布局:
運行APP
在AS中點擊toolbar上的Run按鈕。
如果要使用命令行,切換路徑到工程下,然后執行:
ant debug
adb install bin/MyFirstApp-debug.apk
下一節會學習如何響應button的點擊事件,讀取EditText的內容,然后啟動另一個Activity。
總結
以上是生活随笔為你收集整理的Android官方开发文档Training系列课程中文版:构建第一款安卓应用之创建用户界面的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 论文笔记(Social Attentio
- 下一篇: 在AndroidStudio中配置Gra