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>
Другие вопросы по тегам