Android: Как вы можете выровнять кнопку внизу и listview выше?
Я хочу иметь кнопку внизу списка.
Если я использую relativeLayout/FrameLayout, он выравнивается, но listView переходит к очень быстрому.
(За кнопкой внизу)
![enter image description here]()
FrameLayout:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
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/listview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentBottom="true">
<Button
android:id="@+id/btnButton"
android:text="Hello"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom" />
</FrameLayout>
</FrameLayout>
RelativeLayout:
<?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/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true">
<Button
android:id="@+id/btnButton"
android:text="Hello"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom" />
</RelativeLayout>
</RelativeLayout>
Выше двух кодов работают только как первое изображение. То, что я хочу, - это второе изображение.
Помогает ли кто-нибудь?
Спасибо.
Ответы
Ответ 1
A FrameLayout
Цель состоит в том, чтобы накладывать вещи друг на друга. Это не то, что вы хотите.
В вашем примере RelativeLayout
вы устанавливаете высоту и ширину ListView
на MATCH_PARENT
, это заставит его заняться тем же объемом пространства, что и его родительский элемент, и таким образом занять все пространство на странице (и охватывает кнопку).
Попробуйте что-то вроде:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0"/>
</LinearLayout>
layout_weight
определяет, как будет использоваться дополнительное пространство. Button
не хочет растягиваться за пределы требуемого пространства, поэтому он имеет вес 0. ListView
хочет взять все лишнее пространство, поэтому он имеет вес 1.
Вы можете выполнить что-то подобное с помощью RelativeLayout
, но если это только эти два элемента, я думаю, что LinearLayout
проще.
Ответ 2
Мне нужно две кнопки бок о бок внизу. Я использовал горизонтальную линейную компоновку, но назначение android:layout_height="0dp"
и android:layout_weight="0"
для линейного макета кнопок не помогло. Назначение android:layout_height="wrap_content"
только для линейных макетов кнопок. Здесь мой рабочий макет:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/new_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="New" />
<Button
android:id="@+id/suggest_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Suggest" />
</LinearLayout>
</LinearLayout>
Ответ 3
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"
>
<ListView android:id="@+id/ListView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1">
</ListView>
<FrameLayout android:id="@+id/FrameLayout01"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button android:id="@+id/Button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="button"
android:layout_gravity="center_horizontal">
</Button>
</FrameLayout>
</LinearLayout>
Вот дизайн, который вы ищете. Попробуйте.
Ответ 4
Я использую Xamarin Android, и мое требование точно такое же, как и Уильям Т. Маллард, выше, то есть ListView с двумя бок о бок кнопками под ним.
Решение - этот ответ не работал в Xamarin Studio, однако, когда я установил высоту ListView в "0dp", ListView просто исчез.
Мой рабочий код Xamarin Android выглядит следующим образом:
<?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/ListView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_above="@+id/ButtonsLinearLayout" />
<LinearLayout
android:id="@id/ButtonsLinearLayout"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="horizontal"
android:layout_alignParentBottom="true">
<Button
android:id="@+id/Button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
<Button
android:id="@+id/Button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
</RelativeLayout>
Я выровнял ButtonsLinearLayout в нижней части экрана и установил, что ListView находится над ButtonsLinearLayout.
Ответ 5
В вашей относительной высоте раскладки listview находится match_parent
, которая является fill_parent (для версии 2.1 и старше), поэтому лучшее решение - это если вы хотите использовать относительный макет, а затем сначала объявите свою кнопку, затем просмотрите список, сделайте позицию в виде списка выше ваш идентификатор кнопки, Если вы хотите, чтобы кнопка всегда была внизу, сделайте ее alignParentBottom..
Фрагмент
<RelativeLayout
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:id="@+id/rl1"><Button
android:layout_width="MATCH_PARENT"
android:layout_height="WRAP_CONTENT"
/><ListView
android:layout_width="MATCH_PARENT"
android:layout_height="0"
android:layout_above="@id/listview"/></RelativeLayout>
Это препятствует тому, чтобы ваш список отображался целиком и отображал вашу кнопку.
Ответ 6
@jclova еще одна вещь, которую вы можете сделать, это использовать [email protected]+id/listviewid
в относительном макете
Ответ 7
RelativeLayout
будет игнорировать его дочерние атрибуты android:layout_width
или android:layout_height
, если у детей есть атрибуты, которые правильно определяют свои значения left
и right
или top
и bottom
соответственно.
Чтобы достичь результата на нужном изображении, показывая список над кнопкой, ваш макет должен выглядеть следующим образом:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@android:id/button1"
android:layout_alignParentTop="true"/>
<Button
android:id="@android:id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="@android:string/ok"/>
</RelativeLayout>
Ключ должен определить android:layout_alignParentTop
(определяет top
значение) и android:layout_above
(определяет bottom
значение) в вашем RecyclerView
. Таким образом, RelativeLayout
будет игнорировать android:layout_height="match_parent"
, а RecyclerView
будет помещен над Button
.
Кроме того, убедитесь, что вы смотрите в android:layout_alignWithParentIfMissing
, если у вас более сложный макет, и вам все равно нужно определить эти значения.