自動設定Android控制項的占有螢幕的大小

2021-06-22 06:34:50 字數 2375 閱讀 6383



在不同的物理螢幕下,可以自由設定某控制項占有螢幕寬度的大小,方法如下:

使輸入框的寬度與螢幕寬度對應

現在的布局被設計成edittext和button這兩個控制項的大小和它們的內容相適應,如圖2所示:

圖2. 寬度設定為「wrap_content」後的edittextbutton

這樣做對於按鈕來說沒有什麼問題,但是對文字框來說可能就不太好,因為使用者可能會輸入更長的字串。所以最好是螢幕中沒有用到的寬度給文字框使用。我們可以在linearlayout中使用比重(weight)屬性來實現,具體來說是使用android:layout_weight這一屬性字段。

比重的值是乙個數字,這個數字用來表徵每個view相對於它兄弟view所消耗的空間來說,可以使用的剩餘的空間大小。可以理解為飲料的配方:「2份伏特加和1份咖啡甜酒」,這就意味著飲料中的三分之二是伏特加。例如:如果你給了乙個view的比重是2,而另乙個view的比重是1,那麼他們的和是3,所以第乙個view消耗剩餘空間的三分之二,而第二個view消耗三分之一。如果你又新增了第三個view,它的比重是1,那麼現在第乙個view將會獲得剩餘空間的一半,另外兩個則是四分之一。

預設所有的view的比重是0,所以如果你僅對乙個view的比重定義為大於0的任何數,那麼這個view將會拿到剩餘的所有空間,而其他view則僅擁有他們所需要的空間。所以,為了讓edittext把剩餘空間填滿,把它的比重設定為1,同時讓按鈕沒有比重就可以實現了。

<

edittext

android:layout_weight

="1"

...

/>

當你定義了比重時,為了提高布局的效率,我們把edittext的寬度設定為0(0dp)。將寬度設定為0有利於提高布局效能,因為使用"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

=""xmlns: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

>

android設定控制項的位置以及獲取控制項的座標

專案中遇到乙個問題,就是印表機打字的效果,然後找到了一位大神的輪子。android實用view系列 textview實現印表機效果 這樣確實實現了印表機打字的效果,但是又出現乙個問題。這個印表機的自定義view事先不能確定整體的高度,這樣,印表機每列印一行,高度就會變大一行,那麼在linear la...

佔Android的發展

農曆 戊子年十一月二十日亥時 大雪 2008年12月07日02時01分 小寒 2009年01月05日13時10分 干支 戊子年 甲子月 辛卯日 己亥時 日空 午未 神煞 驛馬 巳 桃花 子 日祿 酉 貴人 寅,午 艮宮 火澤睽 艮宮 天澤履 六神 伏神 本 卦 變 卦 騰蛇 父母己巳火 兄弟壬戌土 ...

Android 動態設定控制項的布局

在android開發中,常常會動態地生成些控制項,並調調整其布局。那麼,如何動態調整空間的布局,請參閱下面的關鍵 mrlmain relativelayout findviewbyid r.id.rlmain layoutparams layoutparams new layoutparams an...