AppBarLayout 兄弟の親またはその兄弟内の最初のスクロール可能なビューで設定する必要がありますか?
Android向けのマテリアルデザイン には、周囲に応じてレイアウトの動作を操作できる Views があり、その1つは CoordinatorLayout 、 このCodePathガイド の言及:
CoordinatorLayoutは、Googleのマテリアルデザインのスクロール効果の多くを実現する機能を拡張します。現在、このフレームワークには、独自のカスタムアニメーションコードを記述することなく機能するいくつかの方法が用意されています。
私が今興味があるのは:
- メインコンテンツ用のスペースを確保するためのツールバーまたはヘッダースペースの拡大または縮小。
したがって、 AppBarLayout と Toolbar でapp:layout_scrollFlags
セットを使用し、別の ViewGroup を使用しますapp:layout_behavior
を使用した AppBarLayout の兄弟。
私の質問は、どの正確なViewGroup(または多分View)にapp:layout_behavior
を入れるべきですか?
これまでのところ、私は試しました(そして、それらはすべてworkedを持ち、それらはすべてAppBarLayoutの兄弟です):
スクロール表示
スクロール可能なビュー内の最初のViewGroup
ViewGroup内のScrollView
そして、これは機能しませんでした:
オンラインには複数の例がありますが、次のように、どこに置くべきかを実際に示しているものはありません。
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/
このリンクを確認: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_behavior
をRecyclerView
、またはNestedScrollView
などのネストされたスクロールが可能な他のビューに追加します。サポートライブラリには、特別な文字列リソース@string/appbar_scrolling_view_behavior
がAppBarLayout.ScrollingViewBehavior
にマップされます。これは、この特定のビューでスクロールイベントが発生したときにAppBarLayout
に通知するために使用されます。イベントをトリガーするビューで動作を確立する必要があります。
String.xmlにappbar_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の回答ではなく、単なる情報です。
app:layout_behavior
は、コーディネーターレイアウトの直接の子であるビューに設定する必要があります