Надлежащим способом решения вашей ситуации является создание отдельного файла макета для оптимизации представления формы для планшетов при использовании существующего файла для телефонов. Вы делаете это путем создания отдельных каталогов res / layout с квалификаторами для размера экрана и / или разрешения, прикрепленного к ним.
Подробнее о доступных квалификаторах ресурсов можно прочитать здесь . Здесь есть несколько вариантов, и я оставлю вам выбор лучшего для вашего приложения, но вот простой пример:
Предположим, ваш текущий файл макета form.xml .
Поместите существующий файл макета в res / layout / form.xml . Это сделает макет по умолчанию.
Создайте другой файл и поместите его в res / layout-large / form.xml . Этот файл макета будет использоваться на устройствах с физическим размером экрана> ~ 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
) ее родителя. Это более эффективно, чем пытаться установить максимальную ширину, особенно когда устройства имеют переменные разрешения и пропорции.
К вашему сведению, я также попытался удалить столько ненужных атрибутов, которые у вас были в вашем XML и которые не делали ничего, кроме создания беспорядка (например, несколько объявлений xmlns:android
). Одним из таких изменений было удаление дополнительных layout_
параметров из TableLayout
дочерних элементов, поскольку TableLayout
все равно игнорирует все эти параметры и вынуждает своих дочерних элементов использовать определенные ограничения. Из документов:
Дочерние элементы TableLayout не могут указывать атрибут layout_width. Ширина всегда MATCH_PARENT. Однако атрибут layout_height может быть определен дочерним элементом; значение по умолчанию - WRAP_CONTENT. Если дочерний элемент является TableRow, тогда высота всегда WRAP_CONTENT.
Подробнее о TableLayout
можно найти в документации SDK .
НТН