Ответ 1
Соответствующим способом обработки вашей ситуации является создание отдельного файла макета для оптимизации вида формы для планшетов при использовании существующего файла для телефонов. Вы делаете это, создавая отдельные каталоги res/layout с квалификаторами для размера экрана и/или разрешения, прикрепленного к ним.
Подробнее о доступных квалификаторах ресурсов можно прочитать здесь. Здесь есть несколько вариантов, и я оставлю это вам, чтобы выбрать лучшее для вашего приложения, но вот простой пример:
Предположим, что ваш текущий файл макета form.xml.
Поместите существующий файл макета в res/layout/form.xml. Это сделает его по умолчанию.
Создайте еще один файл и поместите его в res/layout-large/form.xml. Этот файл макета будет использоваться на устройствах с физическим размером экранa > ~ 5 "(все стандартные планшеты). Чтобы обработать вашу проблему, я изменил свой макет по умолчанию, чтобы отобразить форму, расположенную по горизонтали, и занимает всего 60% ширины экрана
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/adlayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:gravity="center_horizontal"
android:weightSum="1" >
<TableLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.6"
android:stretchColumns="1" >
<TableRow android:id="@+id/tableRow1">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="6dip"
android:text="Barcode Format" >
</TextView>
<EditText
android:id="@+id/edit_barcode_format"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="6dip" >
</EditText>
</TableRow>
<TableRow android:id="@+id/tableRow1">
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="6dip"
android:text="Barcode Type" >
</TextView>
<EditText
android:id="@+id/edit_barcode_type"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="6dip" >
</EditText>
</TableRow>
</TableLayout>
</LinearLayout>
В этом изменении используются свойства layout_weight
и weightSum
LinearLayout
, которые говорят, что таблица заполняет только 60% (layout_weight=0.6
) своего родителя. Это более эффективно, чем пытаться установить максимальную ширину, особенно когда устройства имеют переменные разрешения и пропорции.
FYI, я также попытался удалить столько ненужных атрибутов, которые у вас были в вашем XML, которые ничего не делали, кроме создания беспорядка (например, нескольких объявлений xmlns:android
). Одним из таких изменений было удаление дополнительных параметров layout_
у детей TableLayout
, потому что TableLayout
все равно игнорирует все эти параметры и заставляет своих детей использовать определенные ограничения. Из Документов:
Дети TableLayout не могут указать атрибут layout_width. Ширина всегда MATCH_PARENT. Однако атрибут layout_height может быть определен дочерним элементом; Значение по умолчанию - WRAP_CONTENT. Если дочерним является TableRow, то высота всегда WRAP_CONTENT.
Подробнее о TableLayout
в документах SDK.
НТН