1. ホーム
  2. android

[解決済み] CoordinatorLayoutでツールバーの下にビューを追加する

2022-04-14 09:24:33

質問

以下のようなレイアウトがあります。

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

を追加します。 FragmentFrameLayout で、それらを置き換えます。私の Fragment はリストで、次のようなレイアウトになっています。

<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 その結果、過剰描画は解決されましたが、アプリバーのスクロール動作は機能しなくなりました。

どんなことでもご相談ください。

解決方法は?

属性を取る

app:layout_behavior="@string/appbar_scrolling_view_behavior"

をオフにします。 RecyclerView の上に置き、それを FrameLayout の下に表示しようとしている Toolbar .

スクロールビューのビヘイビアが行う重要なことのひとつに、ツールバーの下にあるコンポーネントをレイアウトすることがありますね。 なぜなら FrameLayout は、スクロールする子孫を持つ ( RecyclerView ) の場合、その CoordinatorLayout を移動させるためのスクロールイベントを取得します。 Toolbar .


もう一つ、気をつけることがあります。 そのレイアウトの動作によって FrameLayout の高さは は、あたかも Toolbar はすでにスクロールされています を使用し、さらに Toolbar が完全に表示されると、ビュー全体が押し下げられ、ビューの下部が CoordinatorLayout .

これには驚きました。 私は、ツールバーが上下にスクロールされると、ビューが動的にサイズ変更されると思っていました。 そのため、ビューの下部に固定されたコンポーネントを持つスクロールコンポーネントがある場合、完全にスクロールするまでその下部コンポーネントは表示されません。 Toolbar .

そこで、UI の下部にボタンを固定したい場合は、ボタンを CoordinatorLayout ( android:layout_gravity="bottom" ) を作成し、ツールバーの下のビューにボタンの高さと同じ高さの底部マージンを追加します。