web-dev-qa-db-ja.com

フラグメント内のrecyclerviewでスクロール時にツールバーを非表示にする

フラグメント内の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"/>
25
Orbit
<?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>
9
Laurence Pardz

これはまだテストしていませんが、これはあなたがしなければならないことです:

  • app:layout_behavior="@string/appbar_scrolling_view_behavior"をID FrameLayoutcontainerに追加します。
  • 追加 Android:fitsSystemWindows = "true"AppBarLayoutに。

これはまさに私のアプリでやっていることであり、動作します。これがうまくいかない場合は、プロジェクトのクリーニング(Android Studio、Build-> Clean Project)を試して、アプリを再度実行してください。

4

私の友人は今日これをして完璧に働いた、私は2つのフラグメントにRecyclerViewがあり、Toolbarをスクロールできる。私は見ました chrisbanes'sCheeseSquareCheeseSquare

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に他の動作を追加しないでください。ちょうどそのようにしてみてください、結果を持って来てください!

3
Yasin Kaçmaz

次のような折りたたみレイアウトを使用できます

<?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
Uma Achanta

これを修正するには、3番目のフラグ-snaplayout_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

3
pavle

Playストアアプリに似たものが必要です。ここにレイアウトを貼り付けます。このコードは簡単で、自分でコーディングできます。

  1. FrameLayout
    • ImageView
    • ScrollView
      1. LinearLayout
      2. Horizo​​ntalScrollView
        • LinearLayout
    • ツールバー

上記のレイアウト階層を使用すると、次のようなことが実現できます。

enter image description here

3
Swathin

Toolbar.xmlとして1つのレイアウト名を作成し、使用するコードにそれを含めますが、1つのことを思い出してください。Relativelayout、Linearlayout、その他のレイアウトは

3
patel135

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>

それから行くのがいいはずです。

2
ʍѳђઽ૯ท
    <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>

enter image description here

0

また、この問題に遭遇しました。しかし、解決策が見つかりました。 xmlの修正を伴うソリューションは不可能であるため、プログラムで行う必要があります。必要なのはInflaterです。はい、はい、それはとても簡単です。オンザフライでxmlを変更し、すべてのスクロールが機能するようにします。

0
Trancer