如图,我想通过如下代码实现第二个edittext与第一个edittext左边缘对齐,但是行不通,求指点。
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="用户名" />
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10" >
<requestFocus />
</EditText>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密码" />
<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:layout_alignLeft="@id/editText1" />
</LinearLayout>
高洛峰2017-04-17 14:50:52
針對你這種情況,最簡單的一種方法是,設定兩個TextView的寬度為固定值,且相等。
LinearLayout
是一種線性排列的佈局,佈局中的控制由左至右(或由上至下)依序排列。 wrap_content
依據其內容分配寬度,「使用者名稱」和「密碼」由於內容長度不同,導致對應的兩個TextView不等寬,而其後緊跟著EditText,這導致了不對齊。
第2種方法,把LinearLayout中的元件寬度設定為0dp,然後設定其android:layout_weight
,例如TextView設定為0.2,EditText設定為0.8,這兩個控制項就會按比例分配整個LinearLayout的寬度。第二個LinearLayout也同樣設置,就可以確保EditText對齊。
第3種方法,使用RelativeLayout
,透過android:layout_alignLeft="@id/anotherViewId"
設定該View的左邊和指定View的左邊對齊。
但是你這種版面狀況很簡單,我認為用方法1和2比較方便。
怪我咯2017-04-17 14:50:52
設權重、設固定值、相對佈局等就不多說了!
推薦使用GridLayout
用GridLayout佈局能完美的解決你這類問題,還能減少LinearLayout的應用
具體用法參考:淺談android4.0開發之GridLayout佈局
註:4.0以上的系統可直接使用,4.0以下的需要導入v7包
評論裡有人說了使用TableLayout,不過需要和TableRow結合使用來佈局,並不推薦。
TableLayout相關用法參考:android佈局------TableLayout(表格佈局)詳解
GridLayout與TabLayout的差異參考:GridLayout與TableLayout佈局
大家讲道理2017-04-17 14:50:52
LinearLayout是不支援android:layout_align*屬性的,想要使用這一系列的屬性,可以換成RelativeLayout。
但看你的需求,其實可以使用TableLayout(當然官方說已經過時了,不建議使用),或者像上面的回答那樣,將layout_width設置為0dp,通過weight權重來為組件定寬,這也是大家寫這種頁面最常用的做法。
PHPz2017-04-17 14:50:52
給你一個建議,在LinearLayout中,利用View的weight屬性來控制子空間的佔空比
比如給Text的weight設定1,EditText的weight設定2,那麼在水平佈局中,兩個控制項就是1:2的關係,自然上下兩個EditText也對齊了