フラグメント内のrecyclerviewがスクロールされると、スクロール時にツールバーを折りたたむようにしています。まず、メインレイアウトをここに示します。
<DrawerLayout>
<RelativeLayout
Android:id="@+id/mainRelativeLayout"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
>
<Android.support.design.widget.CoordinatorLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
>
<Android.support.design.widget.AppBarLayout
Android:id="@+id/appBarLayout"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
>
<Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:elevation="5dp"
app:layout_scrollFlags="scroll|enterAlways"
>
</Toolbar>
</Android.support.design.widget.AppBarLayout>
<FrameLayout
Android:id="@+id/container"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
/>
</Android.support.design.widget.CoordinatorLayout>
</RelativeLayout>
<!-- ignore -->
<drawercontents>
</DrawerLayout>
したがって、おそらく私のフラグメントが@id/container
。最初のフラグメントにはrecyclerviewが含まれており、app:layout_behavior="@string/appbar_scrolling_view_behavior"
そのリサイクラービュー。これは機能し、スクロールするとツールバーが折りたたまれます。問題は、ツールバーが折りたたまれていないときにフラグメントの上部のコンテンツを覆うことです。ツールバーのサイズに等しい上余白をフラグメントコンテナに追加すると、ツールバーが折りたたまれたときに空白が残るようになります(明らかに)。
ここに何が欠けていますか?何か案は?
EDIT:要求されたように、recyclerviewを含むフラグメントのレイアウトは次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.RecyclerView
Android:id="@+id/feed"
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="#00000000"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
<?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"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<Android.support.design.widget.AppBarLayout
Android:id="@+id/tabanim_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/tabanim_toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways|snap"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</Android.support.design.widget.AppBarLayout>
<Android.support.v7.widget.RecyclerView
Android:id="@+id/recyclerView"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</Android.support.design.widget.CoordinatorLayout>
これはまだテストしていませんが、これはあなたがしなければならないことです:
app:layout_behavior="@string/appbar_scrolling_view_behavior"
をID FrameLayout
のcontainer
に追加します。Android:fitsSystemWindows = "true"
をAppBarLayout
に。これはまさに私のアプリでやっていることであり、動作します。これがうまくいかない場合は、プロジェクトのクリーニング(Android Studio、Build-> Clean Project)を試して、アプリを再度実行してください。
私の友人は今日これをして完璧に働いた、私は2つのフラグメントにRecyclerView
があり、Toolbar
をスクロールできる。私は見ました chrisbanes's
CheeseSquare
: CheeseSquare
MainActivity
を見ると、TabLayout
には3つのフラグメントがあり、それらはすべてToolbar
をスクロールできます。だから、このレイアウトを準備しました、多分あなたは見てみましょう:
俺の activity_home.xml
:
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v4.widget.DrawerLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/drawer"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true">
<include layout="@layout/content_home"/>
<Android.support.design.widget.NavigationView
Android:id="@+id/navigation_view"
Android:layout_width="wrap_content"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true"
Android:layout_gravity="start"
app:menu="@menu/homepage_leftdrawer">
</Android.support.design.widget.NavigationView>
</Android.support.v4.widget.DrawerLayout>
そしてcontent_home.xml
:
<?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"
Android:id="@+id/root"
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/AppTheme3.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|enterAlways|snap" />
<Android.support.design.widget.TabLayout
Android:id="@+id/tabs"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:tabTextColor="@color/Transparent_few_white"
app:tabIndicatorColor="@color/White"
app:tabTextAppearance="@style/TabLayoutTextStyle"
app:tabIndicatorHeight="3dp"
app:tabSelectedTextColor="@color/White"
Android:background="@color/ColorPrimary"
app:tabPaddingStart="0dp"
app:tabPaddingEnd="0dp"/>
</Android.support.design.widget.AppBarLayout>
<Android.support.v4.view.ViewPager
Android:id="@+id/pager2"
Android:layout_height="match_parent"
Android:layout_width="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</Android.support.design.widget.CoordinatorLayout>
ここに鍵があります:
私のViewPager
を見ると、app:layout_behavior="@string/appbar_scrolling_view_behavior"
属性それで終わりです。 fragmentに他の動作を追加しないでください。ちょうどそのようにしてみてください、結果を持って来てください!
次のような折りたたみレイアウトを使用できます
<?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"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true">
<Android.support.design.widget.AppBarLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:fitsSystemWindows="true"
Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<Android.support.design.widget.CollapsingToolbarLayout
Android:id="@+id/collapse_toolbar"
Android:layout_width="match_parent"
Android:layout_height="200dp"
Android:fitsSystemWindows="true"
app:contentScrim="@color/zxing_transparent"
Android:paddingBottom="2dip"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:expandedTitleGravity="bottom|center_horizontal"
app:expandedTitleMarginBottom="50dip"
app:collapsedTitleGravity="top|center_vertical"
app:collapsedTitleTextAppearance="@style/collapseTitle">
<Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:elevation="5dp"
app:layout_scrollFlags="scroll|enterAlways"
>
</Toolbar>
</Android.support.design.widget.CollapsingToolbarLayout>
</Android.support.design.widget.AppBarLayout>
<FrameLayout
Android:id="@+id/container"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
/>
</Android.support.design.widget.CoordinatorLayout>
これを修正するには、3番目のフラグ-snap
をlayout_scrollFlags
プロパティに追加します。
<Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:elevation="5dp"
app:layout_scrollFlags="scroll|enterAlways|snap" />
このオプションを使用すると、ビューが部分的にのみ縮小された場合の対処方法が決まります。スクロールが終了し、ビューのサイズが元のサイズの50%未満に縮小された場合、このビューは元のサイズに戻ります。サイズがサイズの50%を超える場合、サイズは完全に消えます。
これを確認してください link 。
Toolbar.xmlとして1つのレイアウト名を作成し、使用するコードにそれを含めますが、1つのことを思い出してください。Relativelayout、Linearlayout、その他のレイアウトは
SwipeRefreshLayout
のレイアウトのルートとしてLinearLayout
またはRelativeLayout
またはFragment
を使用しましたが、機能しています。
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v4.widget.SwipeRefreshLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/swipe_refresh_layout_main"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@color/mycustomcolor"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<Android.support.v7.widget.RecyclerView
Android:id="@+id/recycler_view"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</Android.support.v4.widget.SwipeRefreshLayout>
RelativeLayout
の場合:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/fragment2"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<Android.support.v7.widget.RecyclerView
Android:id="@+id/recycler_view_Android"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_alignParentStart="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</RelativeLayout>
それから行くのがいいはずです。
<Android.support.design.widget.CollapsingToolbarLayout
Android:id="@+id/collapsing_toolbar_layout"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:contentScrim="?attr/colorPrimary"
>
<Android.support.v7.widget.Toolbar
Android:id="@+id/appBar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:layout_collapseMode="pin" />
</Android.support.design.widget.CollapsingToolbarLayout>
</Android.support.design.widget.AppBarLayout>
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
Android:layout_below="@+id/app_bar_layout"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
Android:weightSum="1">
<FrameLayout
Android:id="@+id/container"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@color/colorAccent"
>
<TextView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:text="Your recycler view should go here"/>
</FrameLayout>
</LinearLayout>
また、この問題に遭遇しました。しかし、解決策が見つかりました。 xmlの修正を伴うソリューションは不可能であるため、プログラムで行う必要があります。必要なのはInflaterです。はい、はい、それはとても簡単です。オンザフライでxmlを変更し、すべてのスクロールが機能するようにします。