Android Relative Layout с липким нижним колонтитулом

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

Я хочу собрать XML-интерфейс следующим образом:

Введите описание изображения здесь

Я хочу, чтобы 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 фиксированной высоты, заставив его выглядеть прямо на моем телефоне, но не на других.

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

Solutions Collecting From Web of "Android Relative Layout с липким нижним колонтитулом"

Используйте механизм LinearLayout layout_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> 

Попробуйте следующий код

 <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 снизу.

Я смог добиться того же результата, используя нижеприведенный код. В принципе, родительский макет – это один линейный макет, а первый дочерний элемент – это прокрутка, поэтому он может сжать свой контент при отображении клавиатуры. Также обратите внимание на использование android: layout_height = "0dp" и android: 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> 

Попробуй это

 <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>