Как создать аккуратную форму ввода из двух столбцов в Android?

Я хочу создать аккуратную форму ввода из двух столбцов, например:

http://img31.imageshack.us/img31/115/addnew2.png

Мой код макета xml:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.25" android:text="@string/lblTitle" /> <EditText android:id="@+id/txtTitle" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.75" android:ems="10" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.25" android:text="@string/lblAuthor" /> <EditText android:id="@+id/txtAuthor" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.75" android:ems="10" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.25" android:text="@string/lblPublisher" /> <EditText android:id="@+id/txtPublisher" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.75" android:ems="10" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.25" android:text="@string/lblIsbn" /> <EditText android:id="@+id/txtIsbn" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.75" android:ems="10" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <View android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.25" /> <Button android:id="@+id/btnSubmit" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.375" android:text="@string/submit" /> <Button android:id="@+id/btnCancel" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.375" android:text="@string/cancel" /> </LinearLayout> </LinearLayout> 

Вы можете видеть, что я использовал LinearLayout, используя трюк layout_weight & layout_width = "0dp", чтобы сделать разделение двух столбцов более аккуратным. В HTML-коде мы можем использовать размер% width. Но в макете android xml нет значения% -value для layout_width. Я хочу избегать жестко заданных значений dp для ширины столбца. Возможно ли это в android?

Пока это лучшее, что я могу сделать. Теперь я хочу изменить размер текстового поля ISBN, чтобы стать меньше (на 50% меньше размера текущего размера). Но я не могу изменить размер ширины текстового поля, так как layout_width должен быть «0dp» для layout_weight для работы. Я также хочу сделать то же самое с размером кнопки «Отправить» и «Отмена».

Интересно, использует ли LinearLayout правильный способ создания входной формы аккуратно в android. Может ли TableLayout лучше для этого? Я слышал, что вы не можете изменить layout_width child view в TableLayout.

Некоторые люди рекомендуют мне использовать RelativeLayout, я попробовал, но не поддерживает layout_weight.

Solutions Collecting From Web of "Как создать аккуратную форму ввода из двух столбцов в Android?"

Хорошо, я узнал, как с LinearLayout. Трюк заключается в том, чтобы обернуть просмотры, которые вы хотите изменить с помощью LinearLayout. Тогда ширина самого представления может быть скорректирована с помощью: android: layout_width или android: ems.

Вот код xml:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.25" android:text="@string/lblTitle" /> <EditText android:id="@+id/txtTitle" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.75" android:ems="10" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.25" android:text="@string/lblAuthor" /> <EditText android:id="@+id/txtAuthor" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.75" android:ems="10" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.25" android:text="@string/lblPublisher" /> <EditText android:id="@+id/txtPublisher" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.75" android:ems="10" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_weight="0.25" android:text="@string/lblIsbn" /> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.75" android:orientation="horizontal" > <EditText android:id="@+id/txtIsbn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ems="5" /> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <View android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.25" /> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.75" android:orientation="horizontal" > <Button android:id="@+id/btnSubmit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ems="5" android:text="@string/submit" /> <Button android:id="@+id/btnCancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ems="5" android:text="@string/cancel" /> </LinearLayout> </LinearLayout> </LinearLayout> 

Вы также должны рассмотреть gridLayout , который можно использовать (используя библиотеку android) на API7 +.

Вот ссылка: http://android-developers.blogspot.com/2011/11/new-layout-widgets-space-and-gridlayout.html