はじめに

ToolbarやTabLayoutなどに影の設定(elevation)が効いていなかったため対応をメモします。
※ロリポップより前はもともと影は標準ででません

CollapsingToolbarLayoutでtoolbarなどを括った場合に影が表示しない不具合があるようです。

対応策

stackoverに答えがありました。

参考:
http://stackoverflow.com/questions/32474073/android-design-library-toolbar-shadow

stackoverのとおりカスタムしたCollapsingToolbarLayoutを作成します。
※コンストラクタも必要です

public class ShadowCollapsingToolbarLayout extends CollapsingToolbarLayout {

    private AppBarLayout.OnOffsetChangedListener mOnOffsetChangedListener;
    
    public ShadowCollapsingToolbarLayout(final Context context) {
        super(context);
    }

    public ShadowCollapsingToolbarLayout(final Context context, final AttributeSet attrs) {
        super(context, attrs);
    }

    public ShadowCollapsingToolbarLayout(final Context context, final AttributeSet attrs, final int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        ViewParent parent = this.getParent();
        if (parent instanceof AppBarLayout) {
            if (mOnOffsetChangedListener != null)
                ((AppBarLayout) parent).addOnOffsetChangedListener(mOnOffsetChangedListener);
        }
    }

    public void setOnOffsetChangeListener(AppBarLayout.OnOffsetChangedListener listener) {
        mOnOffsetChangedListener = listener;
    }
}

レイアウトファイルでCollapsingToolbarLayoutをShadowCollapsingToolbarLayoutに差し替えます。あとはmCollapsingLayoutとした変数に以下のコードを実行します。
※CollapsingToolbarLayoutの中にあるAppBarLayoutにはelevationの数値設定をしてください。

mCollapsingLayout.setOnOffsetChangeListener(new AppBarLayout.OnOffsetChangedListener() {
            @Override
            public void onOffsetChanged(AppBarLayout appBarLayout, int i) {
                ViewCompat.setElevation(appBarLayout, appBarLayout.getTargetElevation());
            }
        });

これでうまく影が表示されるようになりました。

その他おすすめの備忘録

 

Comments are closed.