更改ActionBar背景会影响导航抽屉

时间:2014-09-22 20:00:29

标签: android android-actionbar navigation-drawer

我正在使用ScrollView更改片段中的ActionBar背景。我有一个ScrollView监听器,它根据滚动距离更改分层列表中项目的alpha。动作栏实际上很棒。但是,导航抽屉背景受到这种alpha变化的影响,我不明白为什么;导航抽屉背景变得不可见。我可以在运行Android L的Nexus 7上轻松重现这一点,但对于某些4.4设备并不总是这样。

主要部分是:

ActionBar actionBar = activity.getSupportActionBar();
LayerDrawable mActionBarBg = (LayerDrawable) getResources().getDrawable(R.drawable.background_actionbar);
if (mActionBarBg != null) {
         setActionBarBgAlpha(0);
         actionBar.setBackgroundDrawable(mActionBarBg);
}

Alpha计算器是这样的:

scrollView.setOnScrollChangedLitstener(new OnScrollChangedListener() {
         @Override
         public void onScrollChanged(int l, int t, int oldl, int oldt) {
             t = Math.max(t, 0);
             endpointHeader.setTranslationY(endpointHeader.getTop() + (t * 0.25f));
             mScrollAlpha = (int) Math.min(alphaToHeightRatio * t, 255);
             updateActionBarElemsAlpha(mScrollAlpha);
                    }
});

其他几种方法:

private void updateActionBarElemsAlpha(int updatedAlpha){
    if(mActionBarTitleColor != null){
        mActionBarTitleColor.setAlpha(updatedAlpha);
        mActionBarTitleView.setTextColor(mActionBarTitleColor.getColor());
    }

    setActionBarBgAlpha(updatedAlpha);
}

private void setActionBarBgAlpha(int alpha){
    if(mActionBarBg != null){
        mActionBarBg.getDrawable(1).setAlpha(alpha);
        mActionBarBg.getDrawable(2).setAlpha(alpha);
    }
}

background_actionbar.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

<item android:drawable="@drawable/gradient" />
<item android:drawable="@color/grey_divider"/>
<item android:bottom="2dp"
    android:drawable="@color/White"/>

</layer-list>

1 个答案:

答案 0 :(得分:1)

在更改任何属性之前,您应始终改变drawable,否则您将最终修改默认情况下在所有实例中共享的缓存状态。

if (mActionBarBg != null) {
    mActionBarBg.mutate();
    mActionBarBg.getDrawable(1).setAlpha(alpha);
    mActionBarBg.getDrawable(2).setAlpha(alpha);
}