私は次のようなレイアウトを持っています:
<Android.support.design.widget.CoordinatorLayout
Android:id="@+id/main_content"
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/appBar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:theme="@style/ThemeOverlay.AppCompat.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_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
</Android.support.design.widget.AppBarLayout>
<FrameLayout
Android:id="@+id/content"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
/>
</Android.support.design.widget.CoordinatorLayout>
私はFragment
をFrameLayout
に追加し、それらを置き換えます。私のFragment
の1つはリストです。これは次のようなレイアウトになっています。
<Android.support.v7.widget.RecyclerView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/recyclerView"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
私の問題は、ツールバーがリストの上に描画されていることです。私はCoordinatorLayout
の内容をLinearLayout
にラップすることでそれを解決しようとしました。それはオーバードローを解決しましたが、そのようにしてappbarのスクロール動作はもはや機能しません。
任意の助けは大歓迎です!
属性を取ります
app:layout_behavior="@string/appbar_scrolling_view_behavior"
RecyclerView
をオフにして、FrameLayout
の下に表示しようとしていることをToolbar
に置きます。
私はスクロールビューの振る舞いがする1つの重要なことはツールバーの下にコンポーネントをレイアウトすることです。 FrameLayout
はスクロールする子孫(RecyclerView
)を持つので、CoordinatorLayout
はToolbar
を移動するためのスクロールイベントを取得します。
もう1つ注意しておくべきことは、このレイアウトの振る舞いによってFrameLayout
heightのサイズがToolbar
が既にスクロールされているかのようにになり、Toolbar
fullyでビュー全体が表示されている場合は、ビューの下部がCoordinatorLayout
の下部より下になるように単純に押し下げられます。
これは私にとって驚きでした。ツールバーが上下にスクロールされるにつれて、ビューのサイズが動的に変更されることを期待していました。そのため、ビューの下部に固定コンポーネントを含むスクロールコンポーネントがある場合、Toolbar
を完全にスクロールするまでその下部コンポーネントは表示されません。
そのため、UIの一番下にボタンを固定したい場合は、CoordinatorLayout
(Android:layout_gravity="bottom"
)の一番下にボタンを配置し、その下のビューにボタンの高さに等しい下余白を追加することでこれを回避しましたツールバー.
私はこれを追加することでこれを修正することができました:
Android:layout_marginTop = "?android:attr/actionBarSize"
次のようにFrameLayoutに
<FrameLayout
Android:id="@+id/content"
Android:layout_marginTop="?android:attr/actionBarSize"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
/>
Android studio 3.4以降、RecyclerViewを保持するレイアウトにこの行を配置する必要があります。
app:layout_behavior = "Android.support.design.widget.AppBarLayout $ ScrollingViewBehavior"