Панель инструментов скрывает PagerTitleStrip и часть RecyclerView

Снимок экрана 1 и Скриншот 2 моего приложения

Проблема в основном в следующем: PagerTitleStrip и RecyclerView располагаются ниже моей панели инструментов, хотя я установил layout_behaviour для своего ViewPager.

Подробнее:

У меня есть основное действие, которое использует макет ниже, а затем из него я запускаю фрагменты. Прежде чем попробовать CoordinatorLayout + ViewPager и все другие причудливые вещи, у меня был только FrameLayout, в котором я отображал свои фрагменты. Однако я решил, что хочу использовать

app:layout_scrollFlags="scroll|enterAlways"

приложение:layout_behavior="@string/appbar_scrolling_view_behavior"

так что моя панель инструментов исчезает, когда я прокручиваю recyclerview. Я обнаружил в Интернете, что FrameLayout не имеет поведения, позволяющего мне исправить положение recyclerView, идущего под панелью инструментов, и поэтому я перешел на ViewPager + CoordinatorLayout для управления своими фрагментами.

Однако это принесло несколько проблем. Чего я хочу добиться, так это того, что панель инструментов с прикрепленным к ней PagerTitleStrip, когда я прокручиваю панель инструментов, исчезает, оставляя PagerTitleStrip видимым в идеале, возможно, он также скрывается, меня это не волнует. Но я хочу, чтобы мой навигационный ящик продолжал работать, а он не работает. Как будто его не существует.

Теперь в этом первом макете на самом деле работают все вышеперечисленные функции, но проблема в том, что полоса находится под панелью инструментов и не видна, если панель инструментов не скрывается при прокрутке. Ящик работает. К сожалению, элементы просмотра Recycler частично скрыты под панелью инструментов — они не начинают прокручиваться с правой точки экрана, хотя у меня есть этот набор — appbar_scrolling_view_behavior

Макет m_drawerlayout.xml для моей основной деятельности:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/coordinatorLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawer"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">
        <android.support.v4.view.PagerTitleStrip
            android:id="@+id/title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingTop="6dp"
            android:paddingBottom="6dp"
            android:layout_gravity="top"
            android:textSize="15sp"
            android:textColor="@color/tealfifty"
            android:background="@color/teal">

        </android.support.v4.view.PagerTitleStrip>
    </android.support.v4.view.ViewPager>
    <ListView
        android:id="@+id/drawer_list"
        android:background="@color/tealDark"
        android:cacheColorHint="@android:color/transparent"
        android:choiceMode="singleChoice"
        android:divider="@drawable/list_divider"
        android:dividerHeight="1dp"
        android:layout_width="280dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"/>
</android.support.v4.widget.DrawerLayout>

<android.support.design.widget.AppBarLayout
    android:id="@+id/appBarLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <include layout="@layout/app_bar"/>

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

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

А это код моего app_bar.xml

<?xml version="1.0" encoding="utf-8"?>

<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/top_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/teal"
app:theme="@style/ToolbarTheme"
app:popupTheme="@style/Green.Overlay.LightPopup"
app:layout_scrollFlags="scroll|enterAlways" >

<Spinner android:id="@+id/spinner"
    android:layout_gravity="right"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:drawSelectorOnTop="true"
    android:paddingRight="20dp"
    />
</android.support.v7.widget.Toolbar>

Я пытался перемещать элементы вокруг, внутри и снаружи других компонентов, но безуспешно. Например, кажется логичным, чтобы сделать PagerTitleStrip прикрепленным к панели инструментов и поделиться одним поведением, мне пришлось бы вложить PagerTitleStrip в макет AppBar, но PagerTitleStrip должен быть прямым дочерним элементом ViewPager для работы... Любые предложения, ребята, о все это? Я новичок во всех этих функциях дизайна, и я много безуспешно исследовал, здесь есть похожие темы, но совсем не то, что мне нужно. Кажется, в Интернете почти ничего нет о вещах, которые я пытаюсь сделать выше (их несколько), по сравнению с другими основными темами.

Если кому-то интересно, почему я использую ViewPager, когда у меня нет вкладок, это потому, что, как я уже сказал, у FrameLayout нет поведения, позволяющего мне правильно использовать исчезающую панель инструментов, и это то, что я нашел хорошим для использования. Я также видел, что NestedScrollView можно использовать, но я никогда его не использовал... Теперь я хочу, возможно, использовать ViewPagerTitle, который, я думаю, ограничивает меня ViewPager для фрагментов.


person iBobb    schedule 06.02.2016    source источник


Ответы (1)


Проблема в:

<android.support.design.widget.CoordinatorLayout 

<android.support.v4.widget.DrawerLayout

Какой DrawerLayout должен быть корневым макетом.

См.: http://developer.android.com/training/implementing-navigation/nav-drawer.html#DrawerLayout

Чтобы добавить navigation drawer, объявите своего пользователя interface с объектом DrawerLayout в качестве корневого представления макета. Внутри DrawerLayout добавьте одно представление, содержащее основное содержимое экрана (ваш основной макет, когда ящик скрыт), и другое представление, содержащее содержимое navigation drawer.

Также не рекомендуется использовать ListView вместо NavigationView.

А вот способ, предложенный документом (кроме ListView :)):

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!-- The main content view -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <!-- The navigation drawer -->
    <ListView android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp"
        android:background="#111"/>
</android.support.v4.widget.DrawerLayout>

А также:

Однако это принесло несколько проблем. Чего я хочу добиться, так это того, что Toolbar с прикрепленным к нему PagerTitleStrip, когда я прокручиваю панель инструментов, исчезает, оставляя PagerTitleStrip видимым в идеале, возможно, он тоже скрывается, меня это не волнует. Но я хочу, чтобы мой Navigation Drawer продолжал работать, а он не работает.

Проверьте мой ответ об этом:

https://stackoverflow.com/a/35241363/4409113

Вы просто помещаете свою панель инструментов внутрь CollapsingToolbarLayout вот так:

<android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsingtoolbarly"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|snap">

            <android.support.v7.widget.Toolbar
                android:id="@+id/my_toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:elevation="4dp"
                android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

            <ImageView
                android:layout_width="match_parent"
                android:layout_height="190dp"
                android:minHeight="190dp"
                android:scaleType="fitXY"
                android:src="@drawable/header"
                app:layout_collapseMode="parallax" />

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

Он должен свернуть, и после этого панель инструментов будет скрыта. И если вы хотите сохранить этот PagerTitleStrip (рекомендуется использовать TabLayout в настоящее время), просто поместите его ниже CollapsingToolbarLayout и выше </android.support.design.widget.AppBarLayout> следующим образом:

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

        <android.support.design.widget.TabLayout
            android:id="@+id/tabLayout"
            android:layout_width="match_parent"
            android:layout_height="?actionBarSize"
            android:background="?attr/colorPrimary" />

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

Вот и все, тогда удачи.

person ʍѳђઽ૯ท    schedule 06.02.2016
comment
Вау большое спасибо за разъяснения. Я прочитал еще немного и изменил свой XML-макет, и теперь все работает нормально, за исключением одной вещи. Мой NavigationDrawer теперь находится поверх панели инструментов, а не начинается сразу после панели инструментов, как раньше. Есть идеи, как это исправить? Вот как я теперь вложил вещи: DrawerLayout>CoordinatorLayout>AppBar>ViewPager>PagerTitleStrip‹PagerTitleStrip‹VIewPager‹CoordinatorLayout‹Listview‹DrawerLayout - person iBobb; 07.02.2016
comment
Могу ли я увидеть ваш текущий код? Пожалуйста, вставьте это куда-нибудь, мне нужно увидеть это, кстати, не за что ;) - person ʍѳђઽ૯ท; 07.02.2016
comment
pastebin.com/hs7Q2Ap0 Есть ли причина, по которой вы предлагаете мне использовать CollapsingToolbarLayout, когда мне нужна только обычная панель инструментов? нужно добавить это на панель инструментов xml: app:layout_scrollFlags=scroll|enterAlways Кроме того, из того, что я читал, PagerTitleStrip не хуже, чем TabLayout, он просто отличается, макет вкладки рекомендуется только для нескольких вкладок, таких как 3, тогда как PagerTitleStrip может есть много, как в магазине Google Play...? - person iBobb; 07.02.2016
comment
Честно говоря, я не работал с PagerTitleStrip, поэтому (предполагаю) попробуйте использовать ViewPager Над AppBarLayout.CollapsingToolbarLayout просто был тест, чтобы посмотреть, как это должно быть. Потому что TabLayout идет с Support Library - person ʍѳђઽ૯ท; 07.02.2016