设置ActionBar颜色时出现Android UI故障

5
与朋友一起创建了一个Android应用程序,但是UI存在一个奇怪的问题。在切换片段时,UI有时会混乱,出现了下面显示的故障。这在我的Nexus 5上(使用Dalvik运行时和原生Android系统)以及我朋友的Nexus 4(使用ART运行时和SlimKat rom)上都发生过,但在另一个Nexus 5上(使用Dalvik运行时和4.4.2 AOSB rom)则不可观察到。奇怪的是,在更新到最新版本的应用程序之前,它并未出现此问题。以下是使用的布局,其中main_fragment是我使用事务放置Fragment的位置。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

    <FrameLayout
        android:id="@+id/main_fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </FrameLayout>

</RelativeLayout>

我发现当执行这一行代码时出现了故障,而且无论我在setBackgroundDrawable方法中放什么内容都没有关系。
activity.getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor(getCurrentTheme(activity))));

还有其他人遇到这个问题吗?或者也许有人知道解决方法或如何使其正常工作?

编辑:我需要在运行时更改ActionBar颜色(在应用程序设置中更改主题)。


通过样式/主题设置操作栏颜色,这将使执行的行变得多余。 - Tobrun
请参阅官方文档,了解有关样式化操作栏背景的信息:https://developer.android.com/training/basics/actionbar/styling.html#CustomBackground - Tobrun
1
@user1281750 这不会起作用,因为我需要在运行时更改ActionBar的颜色。 - yac00b
1个回答

4
几天前,在一款运行原生Android 5.0的Nexus 5上,我尝试在运行时为ActionBar应用背景色时遇到了问题。我试着采纳了Issue 1760中提出的解决方法:
禁用硬件加速,不论是全局禁用还是针对特定Activity禁用,都可以解决这个问题。还有一种可能是在运行时禁用某个View的硬件加速,但我不确定如何将其应用于ActionBar。

全局禁用硬件加速

AndroidManifest.xml:

<application android:hardwareAccelerated="false" ...>

禁用Activity的硬件加速

AndroidManifest.xml:

AndroidManifest.xml 文件中,为目标 Activity 添加以下属性来禁用硬件加速:
<activity android:name=".YourActivity"
          android:hardwareAccelerated="false" />
<application android:hardwareAccelerated="true">
    <activity ... />
    <activity android:hardwareAccelerated="false" />
</application>

禁用视图的硬件加速

在运行时

myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

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