web-dev-qa-db-ja.com

AppBarLayout + TabLayout + CollapsingToolbarLayout + SwipeToRefresh

私は自分の問題に関連する多くの問題に遭遇しましたが、私が探している行動を望んでいる人は誰もいませんでした。

タブとアプリバーを備えたビューページャーが必要です。含まれているフラグメントがスクロール可能で(下に向かって)スクロールされると、アプリバーは消えますが、上にスクロールするとタブは再び表示されます。これらのフラグメントの一部には、SwipeToRefreshレイアウトが含まれています(問題が発生する場合があります)。私はいつも何かがおかしいままにする多くの構成を試しました。

今のところ、折りたたみ効果はありません(常に非表示になっています)

<?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"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true"
tools:context=".MainPagerActivity">

<RelativeLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

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

        <Android.support.design.widget.CollapsingToolbarLayout
            Android:id="@+id/collapsing_toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginEnd="64dp"
            app:expandedTitleMarginStart="48dp"
            app:layout_scrollFlags="scroll|enterAlways">


            <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" />

            <Android.support.design.widget.TabLayout
                Android:id="@+id/tabs"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                app:tabGravity="fill"
                app:tabIndicatorHeight="6dp"
                app:tabMode="fixed" />

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


    <Android.support.v4.view.ViewPager
        Android:id="@+id/main_pager"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:layout_below="@id/app_bar_layout"
        tools:context=".MainPagerActivity"

        />

</RelativeLayout>

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

そして私の断片の1つ(スクロールするもの):

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    xmlns:wheel="http://schemas.Android.com/apk/res-auto"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    tools:context="com.m360learning.app.fragment.MainPagerNewsFeed">


    <Android.support.v4.widget.SwipeRefreshLayout
        Android:id="@+id/swipeRefreshLayout"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent">

        <RelativeLayout
            Android:layout_width="match_parent"
            Android:layout_height="match_parent">

            <com.pnikosis.materialishprogress.ProgressWheel
                Android:id="@+id/progress_wheel"
                Android:layout_width="80dp"
                Android:layout_height="80dp"
                Android:layout_centerHorizontal="true"
                Android:layout_centerVertical="true"
                wheel:matProg_barColor="#5588FF"
                wheel:matProg_progressIndeterminate="true" />

            <Android.support.v7.widget.RecyclerView
                Android:id="@+id/recycler"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent"
                Android:scrollbars="vertical" />

        </RelativeLayout>

    </Android.support.v4.widget.SwipeRefreshLayout>

</FrameLayout>

何をしたのか正確にはわかりませんが、この質問を書き始めたときから、refreshLayoutによってリストが上がらないようになっています(代わりに更新されます)。

ありがとう

------訂正!

ellie Zou卿のおかげで、この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"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fitsSystemWindows="true"
    tools:context=".MainPagerActivity">


    <Android.support.design.widget.AppBarLayout
        Android:id="@+id/app_bar_layout"
        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:layout_collapseMode="pin"
                app:layout_scrollFlags="scroll|enterAlways"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

            <Android.support.design.widget.TabLayout
                Android:id="@+id/tabs"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                app:tabGravity="fill"
                app:tabIndicatorHeight="6dp"
                app:tabMode="fixed" />

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


    <Android.support.v4.view.ViewPager
        Android:id="@+id/main_pager"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        tools:context=".MainPagerActivity"
        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="bottom|end"
        Android:layout_margin="@dimen/fab_margin"
        Android:src="@Android:drawable/ic_menu_edit" />


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

およびフラグメントレイアウト:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    xmlns:wheel="http://schemas.Android.com/apk/res-auto"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    tools:context="com.m360learning.app.fragment.MainPagerNewsFeed">


    <com.pnikosis.materialishprogress.ProgressWheel
        Android:id="@+id/progress_wheel"
        Android:layout_width="80dp"
        Android:layout_height="80dp"
        Android:layout_gravity="center"
        wheel:matProg_barColor="#5588FF"
        wheel:matProg_progressIndeterminate="true" />

    <Android.support.v4.widget.SwipeRefreshLayout
        Android:id="@+id/swipeRefreshLayout"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent">


        <Android.support.v7.widget.RecyclerView
            Android:id="@+id/recycler"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:scrollbars="vertical" />


    </Android.support.v4.widget.SwipeRefreshLayout>


</FrameLayout>
12
Renaud Favier

視差効果が必要ない場合は、CollapsingToolbarLayoutを使用する必要はありません。

最も重要な構成:

ツールバーで、app:layout_scrollFlags="scroll|enterAlways"を設定します。

ViewPagerで、app:layout_behavior="@string/appbar_scrolling_view_behavior"を設定します。

そして、レイアウトは次のようになります。

<Android.support.design.widget.CoordinatorLayout>

    <Android.support.design.widget.AppBarLayout>

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

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

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

    <Android.support.v4.view.ViewPager/>

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

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

ProgressWheelSwipeRefreshLayoutから移動して、SwipeRefreshLayoutが更新できない問題を修正します。

14
Ellie Zou