【问题标题】:Changing ActionBar background affects Navigation drawer更改 ActionBar 背景会影响导航抽屉
【发布时间】:2014-09-22 20:00:29
【问题描述】:

我正在使用 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>

【问题讨论】:

    标签: android android-actionbar navigation-drawer


    【解决方案1】:

    您应该始终在更改任何属性之前更改可绘制对象,否则您最终会修改默认情况下在所有实例之间共享的缓存状态。

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

    【讨论】:

      猜你喜欢
      • 2019-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多