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.
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.
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
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>
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.
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>