setBackgroundDrawable方法未正常工作

3
在我的应用程序中,我正在使用actionbarsherlock。我使用 getSupportActionBar().setBackgroundDrawable(R.drawable.test). 它的效果很好,颜色显示正常。然而,当我转到另一个活动并返回主要活动时,栏的颜色变为黑色(在我的程序中,我没有将背景drawble设为黑色,只是在onStart()中调用了setSupportAction().setBackgroundDrawable)。但是,如果我将代码更改为 getSupportActionBar().setBackgroundDrawable(new ColorDrawable(0xff550000))); 应用程序就能正常工作。当我点击返回按钮时,颜色设置为预期的0xff55000。

在OnCreate()方法中尝试它。 - Tamilselvan Kalimuthu
问题已经解决。问题是由于竞态条件引起的。ActionBar对象被其他线程获取,因此getSupporrtActionBar.setBackgroundDrawable无法工作。 - Sam nguyen
3个回答

2
我建议在尝试编程设置颜色时不要直接使用颜色代码,因为它可能无法生效。可以尝试以下方法...
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(mContext.getResources().getColor(Color.BLACK)));

希望对您有帮助。

Drawable文件是一个层列表绘制对象,我在其中定义了渐变形状。问题在于,即使我通过编程方式声明了GradientDrawable对象,并使用setBackgroundDrawable(object)方法,ActionBar也不会变成预期的颜色,当我返回到主Activity时,它只会变成黑色。然而,如果我点击ActionBar上的任何按钮,它就会变成在drawable文件中定义的预期颜色。因此,我认为当“返回”按钮被点击时,应用程序还没有准备好获取定义的drawable文件,它只能使用颜色drawable文件。我的理解正确吗? - Sam nguyen
Color.BLACK不是颜色资源ID,而是颜色值。请使用new ColorDrawable(Color.BLACK)。 - Benoit

0
我遇到了几乎相同的问题,调用getActionBar().setBackgroundDrawable两次没有效果。如果我只在onCreate中调用一次,它就能正常工作。如果我把代码放在onResume中,它只对第一个onResume有效,但对其他所有的onResume都会设置成灰色。

0

对我来说也不太好用,特别是如果我与导航抽屉切换列表一起使用。在我的情况下,如果我不使用切换,背景会在一秒钟内变白,然后加载背景可绘制。如果我使用切换,背景仍然是白色的。

我不得不使用自定义视图来实现我想要的效果,而不是改变背景。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接