web-dev-qa-db-ja.com

CoordinatorLayoutが機能しない

新しく発表された Android Design Support Library からCoordinatorLayoutを実装しようとしていますが、サンプルのようにXMLレイアウトで次のコードを使用しました ここ

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

ただし、ビューを下にスクロールしてもアクションバーは非表示になりません。なぜこれが機能しないのか理解できません。

編集:私が知る限り、CoordinatorLayoutListView/GridView/ScrollViewsでは機能せず、RecyclerViewNestedScrollViewでのみ機能するようです。残念ながら、これらのビューの1つに切り替えるだけでは不可能なので、まだ解決策を探しています。

10
dnlbaines

ListViewScrollingViewNestedScrollingChildの両方のインターフェースを実装させる必要があると思います。

これは簡単なことではありませんが、RecyclerViewのソースコードを見ればできるはずです。 NestedScrollingChildHelperを利用しており、同じことができるはずです。

4
jpmcosta

現在、すべてのビューがCoordinatorLayoutで期待される動作をするわけではありません。

ビューはNestedScrollViewインターフェースを実装し、ネストされたスクロールイベントを処理する必要があります。

RecyclerViewNestedScrollView(バージョン22)は、この動作をサポートしています。ただし、AbsListViewListViewおよびGridView)も使用できますが、API21 +でのみ使用できます。

次のようなものを追加するだけです。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
     listView.setNestedScrollingEnabled(true);
}
6

ビューは、CoordinatorLayout.DefaultBehavior(YourView.Behavior.class)アノテーションを使用してデフォルトの動作を宣言するか、app:layout_behavior = "com.example.app.YourView $ Behavior"属性を使用してレイアウトファイルに設定できます。このフレームワークにより、任意のビューをCoordinatorLayoutと統合できます。

したがって、ここでの解決策はAppBarLayout.Behaviorクラスをオーバーライドすることだと思います

0
Takashi Lê

ViewPagerに何を表示しているかによって異なります。 list/recyclerviewを使用すると、正しくスクロールするはずです。

0
aows