web-dev-qa-db-ja.com

CoordinatorLayoutおよびAppBarLayoutの昇格

このようなAppBarレイアウトを作成しました

<Android.support.design.widget.AppBarLayout
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/appbar_layout"
    Android:layout_height="@dimen/app_bar_height"
    Android:layout_width="match_parent"
    Android:fitsSystemWindows="true"
    Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:elevation="20dp">

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

動作し、LinearLayoutに影を落とします。

<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <include layout="@layout/app_bar_large" />
</LinearLayout>

ただし、CoordinatorLayoutのシャドウに配置すると、次のようになります。

<Android.support.design.widget.CoordinatorLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android" 
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <include layout="@layout/app_bar_large" />
</Android.support.design.widget.CoordinatorLayout>

Appbarを作成して影を再び表示するにはどうすればよいですか?

enter image description here

21
Kata Lune

ソースコード に見られるように、これは実際にはCollapsingToolbarLayoutの実装の詳細です。

if (Math.abs(verticalOffset) == scrollRange) {
  // If we have some pinned children, and we're offset to only show those views,
  // we want to be elevate
  ViewCompat.setElevation(layout, layout.getTargetElevation());
} else {
  // Otherwise, we're inline with the content
  ViewCompat.setElevation(layout, 0f);
}

CollapsingToolbarLayoutが固定されていない要素を表示しているときに標高を削除します-デフォルトでは、固定された子のみが表示されている場合にのみ標高があります。

15
ianhanniballake

理由は上記です、解決するためにこれを試してください:

appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
        @Override
        public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
            //some other code here
            ViewCompat.setElevation(appBarLayout, The Elevation In Px);
        }
    });
6
halfCup