只適合和我一樣的初學(xué)者學(xué)習(xí)郊供。
- 在iOS 端這個(gè)界面實(shí)現(xiàn)是超簡(jiǎn)單峡碉,也許是剛接觸Android吧近哟!第一次弄懂流程驮审,感覺步驟有點(diǎn)多,現(xiàn)在終結(jié)一下覺得也很簡(jiǎn)單了吉执。
- Android的圖形用戶界面是由多個(gè)View 和 ViewLayout 組成的疯淫。
- View 的話例如:Button 、text field 等是可視的戳玫。
- ViewGroup 是不可見的熙掺。它是一個(gè)布局。
- 所以我們以后布局的時(shí)候:
Android提供了一個(gè)對(duì)應(yīng)于 View 和 ViewGroup 子類的一系列XMl標(biāo)簽咕宿,我們可以在XML里使用層級(jí)視圖元素創(chuàng)建自己的UI币绩。
接下來的練習(xí)將使用 LinearLayout 布局
- 在Android Studio中,當(dāng)打開布局文件時(shí)府阀,可以看到一個(gè)Preview面板缆镣,點(diǎn)擊這個(gè)面板中的標(biāo)簽:
res/layout/activity_main.xml - 輸入 線性布局:
<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>
-
添加一個(gè)文本輸入框
<EditText android:id="@+id/edit_message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="你好!我是編輯框J哉恪6啊!" android:background="#268be9" />
下面是運(yùn)行的效果圖:
- 與其它View一樣田巴,我們需要設(shè)置XML里的某些屬性來指定EditText的屬性值钠糊,以下是應(yīng)該在線性布局里指定的一些屬性元素:
android:id
- 這是定義View的唯一標(biāo)識(shí)符∫疾福可以在程序代碼中通過該標(biāo)識(shí)符對(duì)對(duì)象進(jìn)行引用抄伍。
- 當(dāng)想從XML里引用資源對(duì)象的時(shí)候必須使用@符號(hào)。緊隨@之后的是資源的類型(這里是id
)管宵,然后是資源的名字(這里使用的是edit_message
)逝慧。 - +號(hào)只是當(dāng)你第一次定義一個(gè)資源ID的時(shí)候需要昔脯。這里是告訴SDK此資源ID需要被創(chuàng)建出來。在應(yīng)用程序被編譯之后笛臣,SDK就可以直接使用ID值云稚,edit_message是在項(xiàng)目gen/R.java
文件中創(chuàng)建一個(gè)新的標(biāo)識(shí)符,這個(gè)標(biāo)識(shí)符就和EditText關(guān)聯(lián)起來了沈堡。一旦資源ID被創(chuàng)建了静陈,其他資源如果引用這個(gè)ID就不再需要+號(hào)了。這里是唯一一個(gè)需要+號(hào)的屬性诞丽。
android:layout_width 和 android:layout_height
- 對(duì)于寬和高不建議指定具體的大小鲸拥,使用wrap_content
指定之后,這個(gè)視圖將只占據(jù)內(nèi)容大小的空間僧免。如果你使用了match_parent
刑赶,這時(shí)EditText將會(huì)布滿整個(gè)屏幕,因?yàn)樗鼘⑦m應(yīng)父布局的大小懂衩。
android:hint
- 當(dāng)文本框?yàn)榭盏臅r(shí)候,會(huì)默認(rèn)顯示這個(gè)字符串撞叨。對(duì)于字符串 "你好!我是編輯框W嵌础G7蟆!"
的值所引用的資源應(yīng)該是定義在單獨(dú)的文件里法希,而不是直接使用字符串枷餐。因?yàn)槭褂玫闹凳谴嬖诘馁Y源,所以不需要使用+號(hào)苫亦。然而毛肋,由于你還沒有定義字符串的值,所以在添加@string/edit_message
時(shí)候會(huì)出現(xiàn)編譯錯(cuò)誤屋剑。下邊你可以定義字符串資源值來去除這個(gè)錯(cuò)誤润匙。
Note: 該字符串資源,也就是我 "你好!我是編輯框1稹3锰摇!" 與 id 如果使用了相同的名稱(edit_message)肄鸽。然而卫病,對(duì)于資源的引用是區(qū)分類型的(比如id和字符串),因此典徘,使用相同的名稱不會(huì)引起沖突的蟀苛。
增加字符串資源
- 這個(gè)和 iOS 有點(diǎn)區(qū)別,它是分開來寫的逮诲。Android 這樣做有它的好處的帜平。
- 當(dāng)你在用戶界面定義一個(gè)文本的時(shí)候幽告,你應(yīng)該把每一個(gè)文本字符串列入資源文件。
- 這樣做的好處是:對(duì)于所有字符串值裆甩,字符串資源能夠單獨(dú)的修改冗锁,在資源文件里你可以很容易的找到并且做出相應(yīng)的修改。通過選擇定義每個(gè)字符串嗤栓,還允許您對(duì)不同語言本地化應(yīng)用程序冻河。
添加一個(gè)按鈕
- 1 在 Android Studio里, 編輯 res/layout下的 activity_main.xml 文件.
- 2、 在< EditText >標(biāo)簽之后定義一個(gè)< Button >標(biāo)簽茉帅。
- 3叨叙、設(shè)置Button的width 和 height 屬性值為 "wrap_content" 以便讓Button大小能完整顯示其上的文本.
- 4 定義button的文本使用android:text 屬性,設(shè)置其值為之前定義好的 button_send 字符串.
- 下面的是文本框和按鈕代碼:
<EditText android:id="@+id/edit_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="string你好堪澎!我是編輯框@薮怼!樱蛤!"
android:background="#268be9" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"/>
Note 寬和高被設(shè)置為"wrap_content"
钮呀,這時(shí)按鈕占據(jù)的大小就是按鈕里文本的大小。這個(gè)按鈕不需要指定[android:id]屬性刹悴,因?yàn)锳ctivity代碼中不會(huì)引用該Button行楞。
當(dāng)前EditText和Button部件只是適應(yīng)了他們各自內(nèi)容的大小攒暇,如下圖所示:
這樣設(shè)置對(duì)按鈕來說很合適土匀,但是對(duì)于文本框來說就不太好了,因?yàn)橛脩艨赡茌斎敫L(zhǎng)的文本內(nèi)容形用。因此如果能夠占滿整個(gè)屏幕寬度會(huì)更好就轧。LinearLayout使用權(quán)重屬性來達(dá)到這個(gè)目的,你可以使用android:layout_weight屬性來設(shè)置田度。
"權(quán)重" 的值指的是:每個(gè)部件所占剩余空間的大小妒御,該值與同級(jí)部件所占空間大小有關(guān)。(是一個(gè)shu'an'fa)
就類似于飲料的成分配方:“兩份伏特加酒镇饺,一份咖啡利口酒”乎莉,即該酒中伏特加酒占三分之二。例如奸笤,我們?cè)O(shè)置一個(gè)View的權(quán)重是2惋啃,另一個(gè)View的權(quán)重是1,那么總數(shù)就是3监右,這時(shí)第一個(gè)View占據(jù)2/3的空間边灭,第二個(gè)占據(jù)1/3的空間。如果你再加入第三個(gè)View健盒,權(quán)重設(shè)為1绒瘦,那么第一個(gè)View(權(quán)重為2的)會(huì)占據(jù)1/2的空間称簿,剩余的另外兩個(gè)View各占1/4。(請(qǐng)注意惰帽,使用權(quán)重的前提一般是給View的寬或者高的大小設(shè)置為0dp憨降,然后系統(tǒng)根據(jù)上面的權(quán)重規(guī)則來計(jì)算View應(yīng)該占據(jù)的空間。但是很多情況下该酗,如果給View設(shè)置了match_parent的屬性券册,那么上面計(jì)算權(quán)重時(shí)則不是通常的正比,而是反比垂涯,也就是權(quán)重值大的反而占據(jù)空間小)烁焙。
對(duì)于所有的View默認(rèn)的權(quán)重是0,如果只設(shè)置了一個(gè)View的權(quán)重大于0耕赘,則該View將占據(jù)除去別的View本身占據(jù)的空間的所有剩余空間骄蝇。因此這里設(shè)置EditText的權(quán)重為1,使其能夠占據(jù)除了按鈕之外的所有空間操骡。
讓輸入框充滿整個(gè)屏幕的寬度
- 1 在activity_Main.xml文件里九火,設(shè)置EditText的layout_weight屬性值為1 .
2 設(shè)置EditText的layout_width值為0dp.
-
就是把 wrap_content 改了。
<EditText android:layout_weight="1" android:layout_width="0dp" ... />
為了提升布局的效率册招,在設(shè)置權(quán)重的時(shí)候岔激,應(yīng)該把EditText寬度設(shè)為0dp。如果設(shè)置"wrap_content"作為寬度是掰,系統(tǒng)需要自己去計(jì)算這個(gè)部件所占有的寬度虑鼎,而此時(shí)的因?yàn)樵O(shè)置了權(quán)重,所以系統(tǒng)自動(dòng)會(huì)占據(jù)剩余空間键痛,EditText的寬度最終成了不起作用的屬性炫彩。
- 設(shè)置權(quán)重后的效果圖:
-
在Android Studio里,點(diǎn)擊工具欄里的Run按鈕
- 或者 使用命令行:
- 1絮短、cd 到你的根目錄
- 2江兢、
ant debug
adb install bin/工程名字-debug.apk - 運(yùn)行效果: