Android Linear/Relative Layout - как "авторазмер" объекта посередине (3 объекта)
У меня есть два случая с линейным (также попробовал относительный) макет в Android. Одно происходит для горизонтального, а другое для вертикального. Начнем с горизонтальной:
это что-то вроде:
<LinearLayout ... >
<Button ... layout:gravity = "left" layout:width = "wrap_content"/>
<TextView ... layout:width = ??????? />
<Image .... layout:gravity = "right" layout:width = "wrap_content"/>
</LinearLayout>
Ну, я хочу, чтобы кнопка оставалась слева, изображение оставалось справа (придерживайтесь конца, а не только справа от текстового представления), а текстовое представление (вероятно, с автоматической шириной или чем-то еще) оставалось посередине, Если я добавлю textview width = "fill/match_parent, то оно отправит изображение за пределы экрана. Если я добавлю wrap_content, то изображение не останется в правой части экрана. Я также попробовал относительное расположение без успеха.
То же самое в вертикальном, где у меня есть что-то вроде:
<LinearLayout ...>
<LinearLayout .... layout:height = "wrap_content" layout:gravity= "top" />
<ListView layout:height = ???????>
<LinearLayout ... layout:height = "wrap_content" layout:gravity = "bottom" />
</LinearLayout>
То же самое требование здесь. Я хочу, чтобы первый L.layout оставался наверху, список автоматически выбирал размер между ними, а 2-й линейный макет оставался внизу. (Представьте, что я пытаюсь создать представление, которое выглядит как UITableView в iPhone, у которого есть NavigationBar, список элементов и панель инструментов внизу. Fist LinearLayout - это NavigationBar, LIst - это ячейки, а второй LinearLayout - это Панель инструментов).
Какие-либо предложения? Предпочел бы решения XML.
3 ответа
Это можно сделать просто с помощью RelativeLayout.
Горизонтальное выравнивание
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="something"
/>
<TextView
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/image"
android:layout_toRightOf="@+id/button" />
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:background="@drawable/icon" />
</RelativeLayout>
Вертикальное выравнивание
<LinearLayout
android:id="@+id/linear_top"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ListView
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/linear_top"
android:layout_above="@+id/linear_bottom" />
<LinearLayout
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" />
</RelativeLayout>
Для вашего второго требования используйте layout_weight
для просмотра списка
<RelativeLayout ...>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_alignParentTop="true" />
<ListView
android:layout_height ="0dp"
android:layout_width="fill_parent"
android:layout_weight="1"
android:layout_below="@+id/top_layout"
android:layout_above="@+id/bottm_layout" />
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_alignParentBottom="true" />
</RelativeLayout>
Вы можете попробовать TableLayout вместо LinearLayout со Stretch Column = 1 (столбцы в таблице LAyout имеют индекс 0).
Первый столбец - ваша кнопка.
Второй столбец - ваше текстовое представление.
Третий столбец это ваше изображение.
Вы можете гуглить пример или посмотреть TableLayout.
Обновлено:
Вы можете увидеть это для ясности:
<RelativeLayout>
<!-- This is Header-->
<LinearLayout
.....
android:layout_alignParentTop="true" >
</LinearLayout>
<!-- This is your table-->
<TableLayout
.....
android:stretchColumns = 1>
<TableRow>
<Button>
.....
</Button>
<TextView>
.....
</TextView>
<ImageView>
.....
</ImageView>
</TableRow>
</TableLayout>
<!-- This is Footer-->
<LinearLayout
.....
android:layout_alignParentBottom="true" >
</LinearLayout>
</RelativeLayout>