Android 多次以编程方式更改actionbar颜色

Android 多次以编程方式更改actionbar颜色,android,Android,我正在使用 getSherlockActivity().getSupportActionBar().setBackgroundDrawable(new ColorDrawable(0xff00ACED)); 在片段中更改我的动作栏的颜色,它就可以工作了。但是如果我打开这个片段,然后打开另一个片段,用不同的颜色调用这个方法,actionbar不会改变为所需的颜色。相反,它会变成白色,而不是我设置的颜色。这是我发现的一个快速修复方法 mActionBar.setBackgroundDrawable

我正在使用

getSherlockActivity().getSupportActionBar().setBackgroundDrawable(new ColorDrawable(0xff00ACED));

在片段中更改我的动作栏的颜色,它就可以工作了。但是如果我打开这个片段,然后打开另一个片段,用不同的颜色调用这个方法,actionbar不会改变为所需的颜色。相反,它会变成白色,而不是我设置的颜色。

这是我发现的一个快速修复方法

mActionBar.setBackgroundDrawable(new ColorDrawable(0xff00DDED));
mActionBar.setDisplayShowTitleEnabled(false);
mActionBar.setDisplayShowTitleEnabled(true);
我也有同样的问题,但只工作了一次(无法连续启用多个颜色开关)

这肯定解决了它:

bar.setBackgroundDrawable(new ColorDrawable(getResources()
                    .getColor(R.color.app_bar_online)));

不推荐使用getColor,而不是直接链接到color doing
new ColorDrawable(R.color.app\u bar\u online)
getColor。使用ContextCompat:

bar.setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(context, R.color.app_bar_online)));

如果您想设置ActionBar的颜色并将其作为字符串,这似乎适合我

    getSupportActionBar().setBackgroundDrawable(
            new ColorDrawable(Color.parseColor("#993b3c4e")));

您可能需要启用和禁用标题以使其正确刷新/显示,如给出的答案所示,但我不需要这样做。

试试这个,

方法1:

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(0xff00FFED));
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources()
                    .getColor(R.color.bg_color)));
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#3A1212")));
方法2:

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(0xff00FFED));
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources()
                    .getColor(R.color.bg_color)));
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#3A1212")));
方法3:

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(0xff00FFED));
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources()
                    .getColor(R.color.bg_color)));
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#3A1212")));

如果你想实用地改变actionbar的颜色或背景,只需使用

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                getSupportActionBar().setBackgroundDrawable(getDrawable(R.drawable.white_background));
            }
white_background.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#fff" />


如果您想避免弃用,可以使用

val mActionBar: ActionBar? = supportActionBar    
mActionBar.setBackgroundDrawable(ColorDrawable(ContextCompat.getColor(this, R.color.red)))
Kotlin语言((AppCompatActivity)getActivity()).getSupportActionBar().setBackgroundDrawable(新的ColorDrawable(getResources().getColor(R.color.colorPrimary)))


在fragment和Java中,这只发生在一台设备上。。。爆炸的摩托罗拉Xoom。但是,这解决了问题!在我的情况下,切换标题显示需要反转,因为我没有显示标题开始。我可以确认这也修复了LG-P880g上的问题。我的朋友,你真了不起!非常感谢。在使用支持操作栏时,我必须使用颜色资源。getSupportActionBar().setBackgroundDrawable(新的ColorDrawable(getResources().getColor(R.color.swift)));现在ActionBars早就不存在了。每个人都使用工具栏nowgetSupportActionBar();这就是我想要的:)我使用
ContextCompat
而不是
getResources
,因为我使用的是支持库。另外,
getResources().getColor(int)
现在不推荐使用。谢谢。如果有人从颜色数组中选择颜色,则使用bodyColor[index]而不是ContextCompat.getColor(context,R.color.app_bar_online)。使用此解决方案,此时我会得到一个NullPointerException(甚至是AS发出的警告)。为什么?请不要只是写一段代码,试着解释一下它的作用和为什么它会工作。