2013-09-18 4 views
6

Я относительно новичок в разработке Android, и мне сложно собрать определенный интерфейс. Я просмотрел много похожих вопросов, но ни один из них не дал мне ответ, который я ищу.Android Относительная компоновка с липким нижним колонтитулом

Я хочу, чтобы соединить интерфейс XML как следующее:

enter image description here

Я хочу LinearLayout, который действует как липкий колонтитул, который будет содержать две кнопки. Эта часть всегда будет выровняться по низу и будет всегда иметь 60dp. RelativeLayout затем будет поверх нижнего колонтитула, но высота должна масштабироваться в зависимости от размера экрана.

Я попытался следующие:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     tools:context=".DartboardActivity"> 

    <RelativeLayout 
      android:id="@+id/game_layout" 
      android:layout_width="match_parent" 
      android:layout_height="506dp" 
      android:background="@drawable/background" 
      android:paddingBottom="@dimen/activity_vertical_margin" 
      android:paddingLeft="@dimen/activity_horizontal_margin" 
      android:paddingRight="@dimen/activity_horizontal_margin" 
      android:paddingTop="@dimen/activity_vertical_margin"> 

      <ImageView 
       android:id="@+id/Dartboard" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:contentDescription="@string/desc_dartboard" 
       android:src="@drawable/dartboard" /> 

      <hhs.week3.dartboard.VerticalSeekBar 
       android:id="@+id/seekBarVertical" 
       android:layout_width="wrap_content" 
       android:layout_height="fill_parent" 
       android:layout_gravity="bottom" 
       android:thumb="@drawable/thumbhorizontal" 
       android:layout_marginBottom="40dp" /> 

      <SeekBar 
       android:id="@+id/seekBarHorizontal" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_alignParentBottom="true" 
       android:thumb="@drawable/thumbhorizontal" /> 

    </RelativeLayout> 

    <LinearLayout 
     android:id="@+id/buttons" 
     android:layout_width="match_parent" 
     android:layout_height="60dp" 
     android:background="#333"> 

     <Button 
      android:id="@+id/fire" 
      style="@style/button" 
      android:layout_width="0dp" 

      android:layout_height="match_parent" 
      android:layout_margin="5dp" 
      android:text="@string/fire" /> 

     <Button 
      android:id="@+id/settings" 
      style="@style/button" 
      android:layout_width="0dp" 

      android:layout_height="match_parent" 
      android:layout_margin="5dp" 
      android:text="@string/settings" /> 

    </LinearLayout> 

</LinearLayout> 

Я получил это работает половину прилично, но это требует от меня, чтобы дать RelativeLayout укусил фиксированную высоту, что делает его смотреть прямо на свой телефон, но не на других ,

Как мне лучше всего подойти?

ответ

15

Используйте LinearLayoutlayout_weight механизм, чтобы назначить все оставшееся пространство для вашего RelativeLayout:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="0px" 
     android:layout_weight="1" 
     ... /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="60dp" 
     ... /> 

</LinearLayout> 
5

Try следующий код

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context=".DartboardActivity" > 

    <RelativeLayout 
     android:id="@+id/game_layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/buttons" 
     android:layout_alignParentTop="true" 
     android:background="@drawable/ic_launcher" 
     android:paddingBottom="@dimen/activity_vertical_margin" 
     android:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin" 
     android:paddingTop="@dimen/activity_vertical_margin" > 
    </RelativeLayout> 

    <LinearLayout 
     android:id="@+id/buttons" 
     android:layout_width="match_parent" 
     android:layout_height="60dp" 
     android:layout_alignParentBottom="true" 
     android:background="#333" 
     android:orientation="vertical" > 
    </LinearLayout> 

</RelativeLayout> 

я удалил LinearLayout и заменен RelativeLayout. Это позволит вам установить палку LinearLayout снизу.

0

Попробуйте

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context=".DartboardActivity"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:orientation="vertical" 
     android:layout_weight="1" 
     android:background="@drawable/background" 
     android:paddingBottom="@dimen/activity_vertical_margin" 
     android:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin" 
     android:paddingTop="@dimen/activity_vertical_margin"> 


      <ImageView 
       android:id="@+id/Dartboard" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:contentDescription="@string/desc_dartboard" 
       android:src="@drawable/dartboard" 
       android:adjustViewBounds="true"/> 

      <hhs.week3.dartboard.VerticalSeekBar 
       android:layout_marginTop="10dp" 
       android:id="@+id/seekBarVertical" 
       android:layout_width="wrap_content" 
       android:layout_height="0dp" 
       android:layout_weight="1" 
       android:thumb="@drawable/thumbhorizontal"/> 

      <SeekBar 
       android:id="@+id/seekBarHorizontal" 
       android:layout_width="match_parent" 
       android:layout_marginTop="10dp" 
       android:layout_height="wrap_content" 
       android:thumb="@drawable/thumbhorizontal" /> 

    </LinearLayout> 
    <LinearLayout 
     android:id="@+id/buttons" 
     android:layout_width="match_parent" 
     android:layout_height="60dp" 
     android:background="#333333"> 

     <Button 
      android:id="@+id/fire" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_margin="5dp" 
      android:layout_weight="1" 
      android:text="@string/fire"/> 

     <Button 
      android:id="@+id/settings" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_margin="5dp" 
      android:layout_weight="1" 
      android:text="@string/settings"/> 

    </LinearLayout> 

</LinearLayout> 
0

я смог достичь того же результата, используя ниже код. В принципе, родительский макет - это один линейный макет, а первый дочерний элемент - это прокрутка, поэтому он может сжать его содержимое, когда отображается клавиатура. Также обратите внимание на использование андроида: layout_height = "0dp" и андроид: layout_weight = "1" используется с Scrollview

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/wrap" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

<ScrollView 
    android:id="@+id/wrap2" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" > 

    <LinearLayout 
     android:id="@+id/LinearLayout1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal" > 


    </LinearLayout> 
</ScrollView> 

<FrameLayout 
    android:id="@+id/buttonsPanel" 
    android:layout_width="match_parent" 
    android:layout_height="40dp" 
    android:background="#333" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="action buttons" /> 
</FrameLayout> 

</LinearLayout> 
Смежные вопросы