Элемент внизу с помощью AppBarLayout рисует элемент за панелью навигации - PullRequest
0 голосов
/ 22 ноября 2018

Я пытаюсь иметь навигацию с фрагментами на разных экранах.Мы решили, что панель инструментов должна исчезнуть при прокрутке.Это легко, используя AppBarLayout и layout_scrollFlags "scroll".

Поэтому я использую NestedScrollView, который будет содержать фрагменты.Некоторые фрагменты просто содержат кнопку, которую я хочу разместить внизу.Другие - это большие меню, которые нужно прокручивать.

Поэтому для этой цели я использую флаг fillViewPort в NestedScrollView.Если фрагмент короткий, он заполнит экран и кнопка появится внизу.

Проблема заключается в том, что если я использую флаг "прокрутка" на AppBarLayout, если на фрагменте есть кнопкавнизу он находится за панелью навигации, а если я не использую флаг «прокрутка», NestedScrollView изменяет размер до нужного размера, и кнопка становится видимой.

Тест очень легко воспроизвести в предварительном просмотре макета на AndroidStudio.

Я пытаюсь сделать что-то странное?Как я могу добиться, чтобы кнопка внизу для определенных (маленьких) фрагментов использовалась с помощью Coordinator и AppBarLayout с флагами «прокрутка»?Обратите внимание, что fitsSystemWindow не имеет для этого никакого значения.

Это просто без с использованием app:layout_scrollFlags="scroll"

enter image description here

Используется app:layout_scrollFlags="scroll"

enter image description here

Это код для упрощенного макета:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context=".MainActivity">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView
        android:fillViewport="true"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <include layout="@layout/content_main" />

    </android.support.v4.widget.NestedScrollView>

</android.support.design.widget.CoordinatorLayout>

также только вв этом случае это "content_main.xml"

    <?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    tools:showIn="@layout/activity_main">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        android:backgroundTint="@android:color/red"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />
</android.support.constraint.ConstraintLayout>

1 Ответ

0 голосов
/ 22 ноября 2018

Решение: Добавление одного <NestedScrollView> само по себе ниже AppBarLayout позволит избежать видимости экрана, так как оно принимает ширину и высоту экрана, но CoordinatorLayout сместит видодин ниже другого по умолчанию.

Следовательно, обходной путь должен заключаться в том, чтобы обернуть <NestedScrollView> в отдельный макет, такой как <LinearLayout>, как показано ниже:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

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

        <android.support.v4.widget.NestedScrollView
            android:fillViewport="true"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <include layout="@layout/content_main" />

        </android.support.v4.widget.NestedScrollView>

    </LinearLayout>

</android.support.design.widget.CoordinatorLayout>

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

Остальная часть кода остается прежней.Попробуйте, прокомментируйте, если возникнут проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...