Я разработчик приложения Venmo для Android.
Другой ответ предлагает использовать GridLayout, который может работать лучше, но приложение Venmo на самом деле использует макет таблицы.
Здесьответы на каждый отдельный вопрос ...
- Чтобы ваши изображения масштабировались до равной ширины, вам нужно задать для layout_width 0dp, а затем установить для android: layout_weight значение 1.
- Чтобы получить одинаковую высоту, задайте layout_height в ImageButton для заполнения родительского элемента, а затем установите вес каждой строки таблицы равным 1.
- Я не совсем уверен, с каким полем или отступом вы столкнетесь.Если вы масштабируете ImageButtons и TableRows, как я уже упоминал выше, это не должно быть проблемой.
- Я не уверен в этом.GridLayout может работать лучше, но я не сталкивался с какими-либо проблемами с использованием TableLayout.
- Официальных рекомендаций не существует, но я предлагаю создавать состояния для ваших элементов рисования, чтобы пользователь мог сказать, когда они нажимаюткнопка.
Вот пример кода того, как приложение Venmo создает сетку:
<TableLayout android:layout_width="fill_parent" android:layout_height="fill_parent">
<TableRow android:layout_weight="1">
<ImageButton android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="fill_parent"
android:src="@drawable/top_left"
android:layout_marginRight="2sp"
android:layout_marginBottom="2sp"
android:background="@drawable/button"/>
<ImageButton android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="fill_parent"
android:src="@drawable/top_right"
android:layout_marginBottom="2sp"
android:background="@drawable/button"/>
</TableRow>
<TableRow android:layout_weight="1">
<ImageButton android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="fill_parent"
android:src="@drawable/bottom_left"
android:layout_marginRight="2sp"
android:background="@drawable/button"/>
<ImageButton android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="fill_parent"
android:src="@drawable/bottom_right"
android:background="@drawable/button"/>
</TableRow></TableLayout>
Имейте в виду, что если экран когда-либо будет физически меньше, чем нарисованный вами ImageButton, вы ''собирается столкнуться с проблемами.Кроме того, если вы сделаете это, вы определенно захотите создать отдельный макет для альбомной ориентации.