web-dev-qa-db-ja.com

「app:layout_behavior」はどこに設定する必要がありますか?

AppBarLayout 兄弟の親またはその兄弟内の最初のスクロール可能なビューで設定する必要がありますか?


Android向けのマテリアルデザイン には、周囲に応じてレイアウトの動作を操作できる Views があり、その1つは CoordinatorLayoutこのCodePathガイド の言及:

CoordinatorLayoutは、Googleのマテリアルデザインのスクロール効果の多くを実現する機能を拡張します。現在、このフレームワークには、独自のカスタムアニメーションコードを記述することなく機能するいくつかの方法が用意されています。

私が今興味があるのは:

  • メインコンテンツ用のスペースを確保するためのツールバーまたはヘッダースペースの拡大または縮小。

したがって、 AppBarLayoutToolbarapp:layout_scrollFlagsセットを使用し、別の ViewGroup を使用しますapp:layout_behaviorを使用した AppBarLayout の兄弟。

私の質問は、どの正確なViewGroup(または多分View)にapp:layout_behaviorを入れるべきですか?


これまでのところ、私は試しました(そして、それらはすべてworkedを持ち、それらはすべてAppBarLayoutの兄弟です):

  • スクロール表示

  • スクロール可能なビュー内の最初のViewGroup

  • ViewGroup内のScrollView

そして、これは機能しませんでした:

  • スクロール可能なビューの子を持たないViewGroup。

オンラインには複数の例がありますが、次のように、どこに置くべきかを実際に示しているものはありません。

http://www.ingloriousmind.com/blog/quick-look-on-the-coordinatorlayout/https://guides.codepath.com/Android/Handling -Scrolls-with-CoordinatorLayouthttps://developer.Android.com/training/basics/firstapp/building-ui.htmlhttps:/ /www.bignerdranch.com/blog/becoming-material-with-Android-design-support-library/

26
Evin1_

このリンクを確認:https://developer.Android.com/reference/Android/support/design/widget/AppBarLayout.html

AppBarLayoutには、いつスクロールするかを知るために、個別のスクロール兄弟も必要です。バインディングはAppBarLayout.ScrollingViewBehaviorクラスを介して行われます。は、スクロールビューの動作をAppBarLayout.ScrollingViewBehaviorのインスタンスに設定する必要があることを意味します。完全なクラス名を含む文字列リソースが利用可能です。

彼らはそれについて言及しました、それはこのようにViewの下に表示されるAppBarLayoutであるべきです:

<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.v4.widget.NestedScrollView
             Android:layout_width="match_parent"
             Android:layout_height="match_parent"
             app:layout_behavior="@string/appbar_scrolling_view_behavior">

         <!-- Your scrolling content -->

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

     <Android.support.design.widget.AppBarLayout
             Android:layout_height="wrap_content"
             Android:layout_width="match_parent">

         <Android.support.v7.widget.Toolbar
                 ...
                 app:layout_scrollFlags="scroll|enterAlways"/>

         <Android.support.design.widget.TabLayout
                 ...
                 app:layout_scrollFlags="scroll|enterAlways"/>

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

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

私の質問は:正確にViewGroup(またはViewかもしれません)にapp:layout_behaviorを入れる必要がありますか?

そしてこのリンクでは: http://guides.codepath.com/Android/Handling-Scrolls-with-CoordinatorLayout

次に、 AppBarLayoutスクロールされるビューの関連付けを定義する必要があります。 app:layout_behaviorRecyclerView、またはNestedScrollViewなどのネストされたスクロールが可能な他のビューに追加します。サポートライブラリには、特別な文字列リソース@string/appbar_scrolling_view_behaviorAppBarLayout.ScrollingViewBehaviorにマップされます。これは、この特定のビューでスクロールイベントが発生したときにAppBarLayoutに通知するために使用されます。イベントをトリガーするビューで動作を確立する必要があります。

22
ʍѳђઽ૯ท

String.xmlappbar_scrolling_view_behaviorフィールドを追加したことを確認してください

<!-- The class name to the ScrollingChildBehavior required for AppBarLayout -->
<string name="appbar_scrolling_view_behavior" translatable="false">Android.support.design.widget.AppBarLayout$ScrollingViewBehavior</string>

そして誰もが知っているように、私たちはこれを以下のように使うことができます

<Android.support.v7.widget.RecyclerView
        Android:id="@+id/rvSomeList"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

OPの回答ではなく、単なる情報です。

16
Ranjit

app:layout_behaviorは、コーディネーターレイアウトの直接の子であるビューに設定する必要があります

7
ishwor kafley