wake-up-neo.com

CoordinatorLayout mit der RecyclerView des ViewPagers

Ich benutze die Ansicht CoordinatorLayout aus Android.support.design. Ich möchte den app:layout_behavior An das RecyclerView des Fragments anhängen.

In dem von Google angegebenen Beispiel wird es nur in RecyclerView derselben XML-Datei angehängt, in der das CoordinatorLayout angehängt wurde.

Gibt es eine Möglichkeit, CoordinatorLayout an das RecyclerView des Fragments innerhalb des ViewPager anzuhängen?

Das Beispiel befindet sich in dieser Blog-Beitrag at Android Entwickler-Blog.

48
Rod_Algonquin

Chris Banes hat ein Beispiel auf Github gepostet, das genau zeigt, was Sie tun möchten.

Hier ist die XML-Datei, die definiert, wie ein Koordinatorlayout indirekt an die Fragmente des Viewpagers angehängt werden kann.

<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/main_content"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <Android.support.design.widget.AppBarLayout
        Android:id="@+id/appbar"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <Android.support.v7.widget.Toolbar
            Android:id="@+id/toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize"
            Android:background="?attr/colorPrimary"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            app:layout_scrollFlags="scroll|enterAlways" />

        <Android.support.design.widget.TabLayout
            Android:id="@+id/tabs"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content" />

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

    <Android.support.v4.view.ViewPager
        Android:id="@+id/viewpager"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

    <Android.support.design.widget.FloatingActionButton
        Android:id="@+id/fab"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="end|bottom"
        Android:layout_margin="@dimen/fab_margin"
        Android:src="@drawable/ic_done" />

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

Der Viewpager soll das Attribut layout_behavior haben.

60
androholic

Das mag dumm sein, aber es hat nicht funktioniert, weil das Build-Tool im build.gradle Der Anwendungsversion nicht auf 22 aktualisiert wurde. Ich habe 21 verwendet, deshalb funktioniert es nicht wie erwartet sein.

Bearbeiten:

Auch das, was SanderTuit gesagt hat: Das Hinzufügen von com.Android.support:recyclerview-v7:22.2.0 Löst das Problem

14
Rod_Algonquin

Verwenden Sie ein FrameLayout und fügen Sie Ihr Fragment in dieses FrameLayout ein. Dann setze app: layout_behavior darauf. Das einzige, was Sie tun müssen, ist layout_behavior auf einen Bruder von AppBayLayout zu setzen. Dieser Bruder wird unter der Symbolleiste angezeigt.

<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/main_content"
Android:layout_width="match_parent"
Android:layout_height="match_parent">

<Android.support.design.widget.AppBarLayout
    Android:id="@+id/appbar"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="?attr/actionBarSize"
        Android:background="?attr/colorPrimary"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        app:layout_scrollFlags="scroll|enterAlways" />

    <Android.support.design.widget.TabLayout
        Android:id="@+id/tabs"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content" />

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

<FrameLayout
    Android:id="@+id/frame"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</Android.support.design.widget.CoordinatorLayout>
6
Jam

Ich hatte vor kurzem das gleiche Problem, das in der Post erwähnt wurde, und die oben genannten Lösungen haben bei mir nicht funktioniert. Zum Glück habe ich es geschafft, es zu lösen. Also nur zum Teilen poste ich hier

Das Problem war, dass ich in meinem Code festgelegt hatte

recyclerView.setNestedScrollingEnabled(false);

aufgrund dessen reagierte die App-Leiste nicht auf die Bildläufe von recyclerView, obwohl das layout_behaviour-Attribut auf viewPager gesetzt wurde. Ändern Sie das oben genannte Attribut in

recyclerView.setNestedScrollingEnabled(true);

löste das Problem und die App-Leiste reagierte auf den Scroll des Recylers.

4
Majeed Khan

Nach ein paar Tests stellte ich fest, dass das TabLayout außerhalb von AppBarLayout funktioniert, unabhängig davon, was das Fragment des Viewpagers enthält. Dies ist meine Haupt-XML.

<com.tqmall.legend.konwledge.view.VerticalSwipeRefreshLayout       xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/swipe_refreshLayout"
Android:layout_width="match_parent"
Android:layout_height="match_parent">

<Android.support.design.widget.CoordinatorLayout
    Android:id="@+id/coordinator_layout"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="#FFE6ECF0">

    <Android.support.design.widget.AppBarLayout
        Android:id="@+id/kn_main_appbar"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content">

        <Android.support.design.widget.CollapsingToolbarLayout
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            app:contentScrim="@Android:color/black"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <include
                layout="@layout/banner_layout"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                app:layout_collapseMode="parallax"
                app:layout_collapseParallaxMultiplier="0.9" />

            <Android.support.v7.widget.Toolbar
                Android:layout_width="match_parent"
                Android:layout_height="?attr/actionBarSize"
                Android:layout_gravity="bottom"
                Android:background="#33000000"
                app:layout_collapseMode="parallax"
                app:layout_collapseParallaxMultiplier="0"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

            </Android.support.v7.widget.Toolbar>

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

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

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:orientation="vertical"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <Android.support.design.widget.TabLayout
            Android:id="@+id/main_fragment_issue_list_tab"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center_horizontal"
            app:tabGravity="center"
            app:tabIndicatorColor="#FF2CA2D5"
            app:tabPaddingEnd="30sp"
            app:tabPaddingStart="30sp"
            app:tabSelectedTextColor="#FF2CA2D5"
            app:tabTextColor="#FF4F5354" />

        <Android.support.v4.view.ViewPager
            Android:id="@+id/main_fragment_issue_list_pager"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent" />
    </LinearLayout>
1
weimin wang