Android - Включая панель кнопок в нижней части экрана настроек экрана? - PullRequest
0 голосов
/ 16 февраля 2019

Я использую Preferences-API для создания своего экрана настроек.
На данный момент мой XML-файл макета SettingsActivity содержит простой LinearLayout с FrameLayout внутри, который я использую длясодержит мой Preferences фрагмент.

HOWEVER , из-за способа, которым пользователь получает доступ к экрану настроек, в AppBar нет кнопки «назад» - и по этой причине я быхотел бы показать ButtonBar внизу экрана настроек, чтобы они могли нажать кнопку cancel или ok ..

Вот что я пытался до сих пор, чтобыдобавьте панель кнопок:

<?xml version="1.0" encoding="utf-8"?>
<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=".SettingsActivity">

<FrameLayout
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<LinearLayout
    style="?android:attr/buttonBarStyle"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button style="?android:attr/buttonBarButtonStyle"
        android:id="@+id/btn_settingsActivity_cancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@android:string/cancel" />

    <Button style="?android:attr/buttonBarButtonStyle"
        android:id="@+id/btn_settingsActivity_ok"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@android:string/ok" />

</LinearLayout>
</LinearLayout>

Кто-нибудь знает, что я делаю неправильно?
С приведенным выше кодом FrameLayout по-прежнему занимает весь экран.
Если я дам FrameLayout конкретный height, я смогу увидеть ButtonBar.
Однако я знаю, что это не то, как я должен это делать.

Может кто-тоПожалуйста, помогите объяснить, как мне поступить?

Спасибо!

1 Ответ

0 голосов
/ 17 февраля 2019

Сначала добавьте некоторую ориентацию вашему ребенку LinerLayout, например, android:orientation="horizontal" и измените высоту на wrap_content.

<LinearLayout
        style="?android:attr/buttonBarStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">..

Во-вторых, скажите FrameLayout, что вы хотите занять оставшееся пространство с помощью свойства weightнапример, android:layout_weight="1" и в целях производительности установите высоту на ноль android:layout_height="0dp".

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

Окончательный код должен выглядеть следующим образом:

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

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

    <LinearLayout
        style="?android:attr/buttonBarStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn_settingsActivity_cancel"
            style="?android:attr/buttonBarButtonStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@android:string/cancel" />

        <Button
            android:id="@+id/btn_settingsActivity_ok"
            style="?android:attr/buttonBarButtonStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@android:string/ok" />

    </LinearLayout>
</LinearLayout>
...