Android 第三课 构建简单的用户界面
構建簡單的用戶界面
上一課下一課該課程教你
你也應該閱讀
- 布局
Android的圖形用戶界面通過?View?和?ViewGroup?的層疊來構建。?View?對象是普通的 UI 小部件,例如按鈕和文本框;ViewGroup?對象是不可見的視圖容器,定義如何布局其子視圖,例如網格和縱向列表。
Android 提供了對應于?View?和?ViewGroup?子類的 XMl 標簽,你可以在 XML 通過 UI 元素的層疊來創建你的 UI。
可選布局
使用 XML 定義 UI 布局而不是在運行時通過代碼創建布局,有時候是有好處的; 但對于為不同屏幕大小創建不同布局來說,他是特別重要的。例如,你可以創建兩個版本的布局, 并告訴系統一個用于“小”屏幕,另一個用于“大”屏幕。更多信息參見教程支持不同設備。
圖1 -?在布局中,ViewGroup?對象是如何形成分支并包含其它?View?對象的插圖。
在這一次教程里,你將學到怎樣用XML創建一個帶有文本輸入框和按鈕的界面。 在接下來的課里, 你將學會對按鈕做出響應,當按鈕被按下的時候文本框里的內容被發送到另外一個Activity。
創建線性布局
從目錄?res/layout/?里打開?activity_main.xml?文件。
注意:在 Eclipse 中,當你打開布局文件的時候,首先看到的是 ADT 布局編輯,這個編輯頁是使用所見即所得的工具幫助你創建布局。 對于本課來說,你是直接在 XML 里進行操作,因此點擊屏幕下方的?activity_main.xml標簽進入 XML 編輯狀態。
創建該項目時你選擇的 BlankActivity 模版提供了以?RelativeLayout?為根視圖, 并包含?TextView?子視圖的activity_main.xml?文件。
首先,需要刪除?<TextView>?元素,把?<RelativeLayout>?布局替換為?<LinearLayout>?布局。 然后添加android:orientation?屬性并設置為 “horizontal”。 結果應該是這樣:
<?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?來設定方向。LinearLayout布局里的子元素按照 XML 里設定的順序顯示在屏幕上。
另外的兩個屬性?android:layout_width?和?android:layout_height用來指定視圖的大小,對所有視圖來說都是必須的。
因為布局中?LinearLayout?是跟視圖,他應該充滿整個屏幕區域, 這是通過設置他的高度和寬度為“match_parent”來實現的。 該值表明, 視圖應該擴展其高度和寬度以匹配其父視圖的高度和寬度。
關于布局屬性的更多信息,參見布局?向導。
添加文本框
在?<LinearLayout>?布局中,添加一個?<EditText>元素就可以創建一個用戶可編輯的文本框。
EditText類屬于View的一個用于展示可編輯的文本的子類。 和View的別的類一樣,你需要設置XML里的某些屬性來指定EditText的具體功能,下邊是你應該在線性布局里指定的一些屬性元素:與其他視圖對象一樣,你需要設置 XML 里的某些屬性來指定?EditText?的具體功能,下邊是你應該<LinearLayout>?布局里指定的一些屬性元素:
? ? <EditText android:id="@+id/edit_message"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="@string/edit_message" />關于資源對象
資源對象是簡單的可以唯一識別命名整數,他與應用程序資源關聯,比如位圖、布局文件和字符串。
每個資源在項目的?gen/R.java?文件中都定義了一個對應資源對象。 你可以通過使用?R?類中的對象名來參照你的資源,比如當你需要為?android:hint屬性指定一個字符串值的時候。你也可以創建任意的資源 ID,通過android:id?屬性關聯到視圖,它允許你從其它代碼中參照這個視圖。
SDK 工具在每次你編譯應用時生成R.java。 你不能手動更改該文件。
更多內容請閱讀開發向導?提供資源。
關于這些屬性:
android:id當你想從 XML 里使用資源類的時候必須使用“@”符號。 其后是資源類型(這里是?id)、斜線、和資源名稱 (edit_message)。
資源類型前的加號 (+) 在你首次定義資源 ID 時使用。在你編譯應用時,SDK 工具使用該 ID 名稱在項目的?gen/R.java?文件中創建新的資源 ID,使它參照到?EditText?元素。 資源 ID 以這種方式生成一次,其它對該 ID 的參照就不需要加號了。 加號只用于指定新的資源 ID 時,對于類似 字符串、布局這樣的實際資源不需要他。 關于資源對象的更多信息參見側邊欄。
注意:?有與此字符串資源同名的元素 ID:edit_message。 不過,對資源的參照根據資源的類型限定了范圍(比如?id?或?string), 因此使用相同的名稱也不會引起沖突。
添加字符串資源
當你需要在用戶界面中添加文本時,你應該總是使用資源來指定每個字符串。 字符串資源允許你在一個位置管理所有的 UI 文本,這使尋找個更新文本更容易。 外部的字符串, 也可以讓您根據不同的語言,為每個字符串資源提供可供選擇的定義來本地化你的應用程序。
默認情況下,你的 Andr??oid 項目包括一個字符串資源文件,它在“res/values/strings.xml”。 添加一個名為“edit_message”的新字符串,將其值設置為“Enter a message”。 (你可以刪除名為“hello_world”字符串)。
既然你在編輯該文件,順便為即將添加的按鈕“button_send”添加一個值為“Send”的字符串。
strings.xml的結果看起來像這樣:
<?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>關于使用字符串資源為其它語言本地化你的應用的更多信息,參見教程“支持不同設備”。
添加按鈕
現在,緊接著?<EditText>?元素添加一個?<Button>到布局中:
? ? <Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/button_send" />高度和寬度都設置為“wrap_content”,所以按鈕會大到足以顯示其文本內容。 此按鈕并不需要的android:id屬性,因為活動的代碼中不會用到它。
使輸入框寬度充滿整個屏幕
如圖2所示,目前布局設計成使?EditText?和?Button?兩個小部件的大小適合其內容。
圖2.?EditText?和?Button?小部件寬度設置為“wrap_content”。
該設置對按鈕來說,工作得很好,但并不適用于文本字段,因為用戶可能輸入更長的文字。 因此, 使文本字段充滿屏幕寬度的未使用區域會比較好。 在?LinearLayout?布局中, 你可以通過指定?android:layout_weight?屬性設置權重來實現。
權重值是一個數字,指定每個視圖所要占用的剩余空間量,對于兄弟視圖的相對占用量。這有點像調酒配方: “兩份伏特加酒,一份咖啡利口酒”,即三分之二的飲料是伏特加酒。例如,如果你設置一個視圖的權重是 2、 另一個權重為1,總和是3。所以第一個視圖填充剩余的空間的三分之二,第二個視圖填充其余空間。 如果添加了第三個視圖,并設它的權重為1,那么現在第一個視圖(權重2)得到1/2的剩余空間, 剩下的兩個各獲得1/4。
所有視圖的默認權重為 0,因此,如果只有一個視圖的權重大于 0, 則該視圖填充為各視圖分配必要空間后剩余的所有空間。因此,要使?EditText?元素填充布局的剩余空間,設它的權重為1,保持按鈕沒有權重。
? ? <EditTextandroid:layout_weight="1"... />為了提高布局效率,指定了權重時,你應該將?EditText?的寬度設為零(0dp)。 設置寬度為零會提高布局性能,是因為使用“wrap_content”作為寬度時, 需要系統進行無意義的計算,因為權重值需要另外的寬度計算,來填充剩余空間。
? ? <EditTextandroid:layout_weight="1"android:layout_width="0dp"... />圖3顯示了將所有權重分配給?EditText?元素的結果。
圖 3.?給予?EditText?小部件所有權重, 填充了?LinearLayout?布局的所有剩余空間。
現在,完整的布局文件應該如下:
<?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" /><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/button_send" /> </LinearLayout>此布局由創建項目時通過 SDK 工具生成的默認?Activity?類加載, 所以你現在可以運行應用來查看結果:
- 在Eclipse中,從工具欄中單擊“Run”。
- 或者從命令行,將目錄切換到你的 Andr??oid 項目的根目錄下,然后執行: ant debug adb install bin/MyFirstApp-debug.apk
繼續下一課,你可以學習如何響應按鈕按下,讀取文本字段的內容,啟動另一個活動,等等。
轉載于:https://www.cnblogs.com/aikongmeng/p/3697411.html
總結
以上是生活随笔為你收集整理的Android 第三课 构建简单的用户界面的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 【Derby 系列】Apache Der
- 下一篇: 035、Linux下Dmidecode查
