Android學習路線(四)構建一個簡單的UI,androidui

來源:互聯網
上載者:User

Android學習路線(四)構建一個簡單的UI,androidui

Android應用的圖形化使用者介面的構建使用的是View 和 ViewGroup 對象的層次嵌套。 View 對象通常是UI組件,例如 buttons 或者 text fields ,而 ViewGroup 是用來定義它的子布局如何排布的容器,它通常是不可見的,例如一個網格或者一個垂直的列表。

Android提供XML詞彙與View或者ViewGroup的子類的對應,這樣的話你就可以通過XML元素的層級嵌套來定義你的UI。

另一種布局

使用XML聲明UI比在運行時代碼中聲明更有用處可以在很多地方看出來,尤其是當你為不同的螢幕建立不同的布局時。例如你建立了兩個布局,然後告訴系統,其中一個是用於小尺寸的螢幕,另一個是用於大尺寸的螢幕。有關跟多的資訊,請查看Supporting Different Devices。

圖 1. 插圖所示的是ViewGroup對象是如何分支布局並且包含其他的View對象

在這片課程中,你將會使用XML來建立一個包含text field和一個button的布局。在接下來的課程中你就會學習如何響應button的點擊事件,當按下button時將text field中的文字發送給另一個Activity。

建立一個線性布局

開啟 在 res/layout 目錄下 fragment_main.xml 檔案。

提示: 在Eclipse中,當你開啟一個layout(布局)檔案時,首先顯示的是布局的圖形編輯器。這是一個使用WYSIWYG工具來協助你編輯介面的編輯器。在本次課程中,你將要學習如何直接使用XML來工作,所以點擊介面底部的 fragment_main.xml tab 來開啟編輯器吧。

在你建立項目是選擇的 BlankActivity 模板中包含了 fragment_main.xml 檔案,檔案的內容有RelativeLayout 根布局和一個 TextView 子布局。

首先,刪除 <TextView> 元素,並且將 <RelativeLayout> 元素改為 <LinearLayout>。然後添加android:orientation 屬性,並將其值設定為 "horizontal"。就像下面這樣:

<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 是一個view group (ViewGroup 的子類) ,它的子布局會以水平或者垂直的方向線性布局,通過 android:orientation 屬性來指定。LinearLayout 的子布局將會按照XML檔案中的順序在螢幕上展示。

另外兩個屬性,android:layout_width 和 android:layout_height,在所有的View中都需要設定,用來指定布局的寬度和高度。

由於LinearLayout 是根布局,需要通過將其高度設定為"match_parent"來讓它在整個螢幕範圍內可見。這個值聲明了此布局將會延展它的寬度或者高度來適應它的父布局。

有關更多的資訊,請查看 Layout 嚮導。

添加一個Text Field

要建立一個使用者可編輯的text field,需要在 <LinearLayout>標籤內添加<Edit Text>元素。

就像所有View 對象那樣,你必須定義某些XML屬性來指定EditText 對象的屬性。下面向你展示如何在<LinearLayout> 元素中來定義它:

    <EditText android:id="@+id/edit_message"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:hint="@string/edit_message" />
關於資來源物件

一個資來源物件是與應用資源相關聯的簡單的唯一的integer類型的名字,例如一個bitmap,layout,string。

每一個資源都會在gen/R.java 檔案中有相應的資來源物件與其對應。你使用R類的那些對象名稱來引用你的資源,例如當你需要為android:hint 屬性指定一個字串類型的值時。你還可以使用android:id 屬性隨意建立資源ID,這樣你就可以在其他的代碼中引用這個view。

SDK工具在你每次編譯應用時都會產生R.java檔案。你一定不要手動修改此檔案的內容。

更多資料,請查看Providing Resources。

關於這些屬性:

android:id
它為此view提供了一個唯一的標識,你可以在應用的代碼中直接引用它,例如讀取和操作這個對象(你將會在下篇課程中學到)。

當你要參照XML檔案中其他的對象時,你需要使用(@) 。它的後面跟著資源的類型(本例中是id),一個斜杠,然後資源的名稱。

+這個符號只有在你第一次定義一個資源的ID時才需要加上。當你編譯你的應用的時候,SDK工具會通過這個ID名稱在gen/R.java檔案中建立相應的資源ID來與EditText元素對應。一旦資源ID通過這種方式被定義好,其他引用這個ID不需要使用+號。查看右側的文字瞭解更多資來源物件。

android:layout_width and  android:layout_height
使用"wrap_content"指定view的大小會根據內容來適應, 用來代替直接指定view的大小。如果你希望使用 "match_parent",那麼 EditText 元素將會佔滿整個螢幕,應為它會根據父布局 LinearLayout來適應大小。跟多資訊,請查看Layouts 嚮導。
android:hint
這個屬性用於指定當text field為空白時顯示的內容。最好使用 "@string/edit_message" 這種引用方式來為其賦值,而不要直接在代碼中賦值。

提示: 這個字元類型和元素ID有相同的名稱。然而他們的類型不同,因此同樣的名稱不會衝突。

添加一個String資源

當你需要在UI中顯示文字的時候,你一定要為每個字串設定為資源。字串資源讓你把所有的UI上的文字都集中在一個地方管理,讓更新文字更簡單。這種方式在你為不同語言提供字串定義時可以為不同的語言實現本地化(國際化)。

在預設情況下,你的項目包含一個字串資源檔,在res/values/strings.xml下。添加一個字串,名字為"edit_message" ,同時將其值設為"Enter a message" 。(你可以刪掉"hello_world" 了)

在這個檔案中為你即將要添加的button添加一個“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="action_settings">Settings</string>    <string name="title_activity_main">MainActivity</string></resources>


添加一個Button

現在添加一個 <Button> 元素到布局中,緊跟著 <EditText> 元素:

    <Button        android: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"

這樣對於button能夠很好的展示,但是對text field就不一樣了,因為使用者可能會輸入一些更長的文字。因此,讓text field佔滿螢幕的空餘部分效果會更好。在LinearLayout中,你可以使用android:layout_weight 屬性來指定。

Weight是一個用來指定每個view應該佔用的空間的值,相對與同層級的其他的布局。 這工作有點像成分的飲料配方量:“2份伏特加,1份咖啡力嬌酒”是指三分之二的飲料是伏特加。例如,如果給一個view的權重為2另一個view的權重為1,則總和是3,那麼第一個view填充剩餘空間的2/3,第二view填充的其餘部分。如果添加了第三個view,並給它一個權重為1,那麼第一個布局(權重2)現在佔一半的剩餘空間,而剩下的兩個各得四分之一。

所有view預設的權重是0,因此如果你僅指定一個view的權重大於0,那麼它會佔滿所有其它view剩餘的空間。所以,要讓EditText填充剩餘空間,就只需將它的權重設為1,然後button不設定權重值。

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

當你指定權重值是,為了提高布局的效率,你應該將EditText的寬度改為0dp。設定寬度為0dp的原因是,它會根據其他的view計算寬度後填充剩餘空間,而此時通過寬度為"wrap_content"來通過系統計算寬度是沒有用處的。

    <EditText        android: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" />    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/button_send" /></LinearLayout>

這個布局在你建立項目時被SDK工具產生的Activity所引用,所以你可以運行這個應用看看結果:

  • 在Eclipse中,在工具列上點擊  。
  • 或者在命令列中,改變目錄到項目根目錄然後執行:
    ant debugadb install bin/MyFirstApp-debug.apk



怎才可以成為一個android編程

先學好java基礎,接著學習android四大組建 UI,socket,其實android做多了有一年以上工作經驗就行了,高手無非就是演算法簡潔有效率,
不要想一口吃個胖子,踏踏實實的走下去,高手都是從菜鳥過來的
 
Android學習路線,需要馬上開發,給個開發實用的學習路線包括開發注意事項

先說你有什麼相關基礎嗎?
如果沒有java基礎,那就先java基礎。沒有資料庫基礎,學完java後學習資料庫基礎。
然後就買本android從入門到精通。多翻翻。平時的時間就用來看視頻。傳智的就行。當然更好的更推薦。把最基本的四大基本組件掌握好。當然你如果看書知道你開發需要學什麼那最好。針對性的去看。比如你如果不用Service,那就不用學。四大組件你不用的可以暫時放下。把需要的都看懂。跟著視頻練手,懂了就背過視頻自己鍛煉。覺得差不多就可以直接去開發了,看你這樣不像是為了找工作的,更像是工作需要。所以這樣應該是可行的。但是要是找工作的話這就不太行了,人家問的很全。而且有些公司會有機試。理論和開發要同步,否則就算你會做也難以調試,因為你不知道哪錯了。沒有理論支撐。
大致就這樣。
希望能幫到你。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.