2013-10-27 4 views
0

Я хочу, чтобы кнопки OK/Cancel были закреплены внизу (даже если в списке больше предметов, которые могут быть показаны на экране). Вот что она в настоящее время выглядит следующим образом:Как установить кнопки в нижней части макета?

enter image description here

Кнопки находятся на вершине, а не на дне.

Схема, которая содержит кнопки:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:orientation="horizontal" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:stretchColumns="true" 
      android:id="@+id/buttons_layout">  
    <TableRow>  
     <Button 
      android:id="@+id/btnOK" 
      android:background="@color/pomegranate" 
      android:text="OK" 
      android:layout_gravity="fill_horizontal" 
      android:layout_weight="1" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"/>   
     <Button 
      android:id="@+id/btnCancel" 
      android:background="@color/wet_asphalt" 
      android:text="Cancel" 
      android:layout_weight="1" 
      android:layout_gravity="fill_horizontal" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"/> 
    </TableRow> 
</TableLayout> 

Композиционный макет:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"> 
    <ListView android:id="@+id/options_list" 
       android:layout_width="fill_parent" 
       android:layout_height="match_parent"> 
    </ListView> 
    <include layout="@id/buttons_layout" 
      android:layout_alignParentBottom="true" 
      android:layout_height="match_parent" 
      android:layout_below="@id/options_list"/> 
</RelativeLayout> 

Я следовал указаниям, я читал на http://developer.android.com/guide/topics/ui/layout/relative.html

Я попробовал этот ответ - https://stackoverflow.com/a/6285438/168719 - мне это не помогло.

Я подозревал, что это может не сработать, потому что просмотр списка не «знает», насколько высок он, поэтому макет кнопки не знает, где разместить себя. Но я исключил это, установив высоту ListView на произвольное значение, например, 100dp. Кнопки все еще накладываются над ним.

Я искал все атрибуты макета, но я не могу заставить его работать.

Помимо решения, я также хотел бы знать, почему моя не работает ...

+0

Почему вы не просто изменить RelativeLayout к LinearLayout с ориентацией по вертикали? Или просто поместите кнопку в макет со списком и поместите их внизу? – tyczj

+0

1. Я сделал это, но теперь представление списка выталкивает кнопки из представления (если вы не установили высоту ListView на фиксированное значение). Я также хотел бы знать, что было неправильным в отношении использования «RelativeLayout». 2. Я хочу повторно использовать компоновку кнопок. –

ответ

1

Макет должен быть что-то вроде этого:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 
    <ListView android:id="@+id/options_list" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_above="@+id/layout_buttons" > 
    </ListView> 
    <include android:id="@+id/layout_buttons" 
      layout="@id/buttons_layout" 
      android:layout_alignParentBottom="true" 
      android:layout_height="wrap_parent" 
      android:layout_width="wrap_content"/> 
</RelativeLayout> 
0

вы можете попробовать использовать его таким образом

<relativelayout1> 

<relativelayout2 specify layout below listview with id="list"> 
    <button1> 
    <button2> 
</relativelayout2> 


<listview id="list"> 
</listview> 

</relativelayout1> 

так это обеспечит независимо от того, как долго ваш список вы всегда получите кнопки под списком. поэтому вы можете иметь список прокрутки и статические кнопки под списком

0

попробуйте это. Поместите include тег внутри другого RelativeLayout, то убедитесь, что ListView выше нового RelativeLayout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/parentLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <RelativeLayout 
     android:id="@+id/buttonsContent" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" > 

     <include 
      android:id="@+id/buttons" 
      android:layout_width="wrap_content" 
      layout="@layout/buttons_layout" /> 
    </RelativeLayout> 

    <ListView 
     android:id="@+id/options_list" 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent" 
     android:layout_above="@id/buttonsContent" > 
    </ListView> 

</RelativeLayout> 
0

Попробуйте как этот

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent"> 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_above="@+id/layout_buttons" 
      android:orientation="vertical" > 
     <ListView android:id="@+id/options_list" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent"> 
     </ListView> 
     </LinearLayout> 
     <include android:id="@+id/layout_buttons" 
       layout="@id/buttons_layout" 
       android:layout_alignParentBottom="true" 
       android:layout_height="wrap_parent" 
       android:layout_width="wrap_content"/> 
    </RelativeLayout> 
Смежные вопросы