web-dev-qa-db-ja.com

CoordinatorLayoutのツールバーの下にビューを追加

私は次のようなレイアウトを持っています:

<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の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のスクロール動作はもはや機能しません。

任意の助けは大歓迎です!

156
WonderCsabo

属性を取ります

app:layout_behavior="@string/appbar_scrolling_view_behavior"

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

私はスクロールビューの振る舞いがする1つの重要なことはツールバーの下にコンポーネントをレイアウトすることです。 FrameLayoutはスクロールする子孫(RecyclerView)を持つので、CoordinatorLayoutToolbarを移動するためのスクロールイベントを取得します。


もう1つ注意しておくべきことは、このレイアウトの振る舞いによってFrameLayout heightのサイズがToolbarが既にスクロールされているかのようにになり、Toolbar fullyでビュー全体が表示されている場合は、ビューの下部がCoordinatorLayoutの下部より下になるように単純に押し下げられます。

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

そのため、UIの一番下にボタンを固定したい場合は、CoordinatorLayoutAndroid:layout_gravity="bottom")の一番下にボタンを配置し、その下のビューにボタンの高さに等しい下余白を追加することでこれを回避しましたツールバー.

319
kris larson

私はこれを追加することでこれを修正することができました:

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"
       />
68
Michael G

Android studio 3.4以降、RecyclerViewを保持するレイアウトにこの行を配置する必要があります。

app:layout_behavior = "Android.support.design.widget.AppBarLayout $ ScrollingViewBehavior"

0
Shashank