Android 可能透支:根元素在Theme.Holo中绘制背景

Android 可能透支:根元素在Theme.Holo中绘制背景,android,android-theme,Android,Android Theme,我读过关于这个问题的类似问题,但我在任何地方都找不到答案。为了解决透支问题,我使用以下方法: <style name="MyTheme" parent="@android:style/Theme.Holo"> <item name="android:windowBackground">@null</item> </style> @空的 当我在具有操作栏的活动中使用此选项时,操作栏的背景色也会更改为null。我怎样才能解决这个问题?如果

我读过关于这个问题的类似问题,但我在任何地方都找不到答案。为了解决透支问题,我使用以下方法:

<style name="MyTheme" parent="@android:style/Theme.Holo">
    <item name="android:windowBackground">@null</item>
</style>

@空的

当我在具有
操作栏的活动中使用此选项时,操作栏的背景色也会更改为null。我怎样才能解决这个问题?如果我将操作栏的颜色设置为分隔,蓝色分隔符将消失。如何将下面帧的背景设置为空,使其成为动作条分隔符?

我建议如下:

<style name="MyTheme" parent="@android:style/Theme.Holo">
    <item name="android:windowBackground">@null</item>
</style>
创建两个单独的主题:一个用于带操作栏的活动,另一个用于不带操作栏的活动

对于没有操作栏的活动,请使用您在帖子中提供的主题,即:

<style name="MyTheme" parent="@android:style/Theme.Holo">
    <item name="android:windowBackground">@null</item>
</style>
活动的布局可能如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/black" // remove this
    android:orientation="vertical" >
    ...
</LinearLayout>

...
我在上面的代码片段中指出了要删除哪一行


这有帮助吗?:)

用另一种方式解决透支问题。在android:windowBackground
中设置所需的背景,并从布局中删除背景。然后你会得到动作条的背景

不管怎样,使用空窗口背景是一个糟糕的解决方案,因为它会导致意外的副作用,比如渲染工件(或者在您的情况下缺少操作栏背景)。Chet Haase在以下章节中对此进行了详细解释:

避免空窗口背景

避免透支的一种技术是消除窗口背景 在层次结构中的视图都具有不透明 背景。也就是说,用户将看不到 窗口,如果视图层次结构完全覆盖了该背景 一个或多个不透明视图

消除窗口背景可能是一种有效的技术,但是 这往往是解决透支问题的一种复杂方法,而且通常 导致在不同情况下渲染工件。尽管如此 可以在应用程序清单中设置空窗口背景, 这可能会由于系统无法运行而导致图形瑕疵 正确绘制起始窗口。这是一种更正确的方法 将起始窗口背景保留在清单中的适当位置, 但是在活动的onCreate()方法中,通过调用 getWindow().setBackground(空)。但即使是这种方法也可能导致 人工制品例如,如果键盘/IME设置为调整大小和 然后为具有空背景的活动设置动画 在中设置动画时,可能是键盘后面的瑕疵,因为 窗口管理器没有为该背景绘制任何内容。也, 全屏ListView可能有过卷反弹间隙的工件 (可以与其他人一起工作) setOverscrollFooter/Header())

解决这种情况下透支问题的正确方法是 实际使用起始窗口。而不是用带有 它们自己的不透明背景色介于窗口背景和 视图,将所需的背景可绘制视图放置在窗口本身上 windowBackground主题属性并允许那些介入 容器保持其默认的透明背景