我已经为这个问题读过类似的问题,但我无法在任何地方找到答案。为了解决透支问题,我使用以下内容:
<style name="MyTheme" parent="@android:style/Theme.Holo">
<item name="android:windowBackground">@null</item>
</style>
当我在具有ActionBar
的活动中使用它时,操作栏的背景颜色也会变为null。我怎样才能解决这个问题?如果我将操作栏的颜色设置为单独,则蓝色分隔符将消失。如何将下面框架的背景设置为空操作栏分隔符?
答案 0 :(得分:0)
我建议如下:
创建2个单独的主题:一个用于带有操作栏的活动,另一个用于没有它的活动。
对于没有操作栏的活动,请使用您在帖子中提供的主题,即:
<style name="MyTheme" parent="@android:style/Theme.Holo">
<item name="android:windowBackground">@null</item>
</style>
对于带有操作栏的活动,只需创建一个没有android:windowBackground
项目的主题,而是设置您希望在该活动中拥有的特定背景颜色。然后,在为活动注释的布局文件中,删除android:background
属性(因为它已经由主题设置)。
为了使它更具视觉效果,主题看起来可能如下:
<style name="MyThemeForActivityWithoutActionBar" parent="@android:style/Theme.Holo">
<item name="android:background">@android:color/black</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>
我在上面的代码段中指出了我要删除的哪一行。
这有帮助吗? :)
答案 1 :(得分:0)
以不同的方式解决您的透支问题。在android:windowBackground
中设置所需的背景,而不是从布局中删除背景。然后你会得到动作栏背景。
无论如何,使用空窗口背景是一个糟糕的解决方案,因为它会导致意外的副作用,例如渲染工件(或者在您的情况下缺少操作栏背景)。 Chet Haase在Developing for Android VIII The Rules: User Interface:
中详细解释了这一点避免空窗口背景
避免透支的一种方法是消除窗口背景 在层次结构中的视图都具有不透明的情况下 背景。也就是说,用户将看不到背景 窗口,如果视图层次结构完全覆盖该背景 一个或多个不透明的视图。
消除窗口背景可能是一种有效的技术,但它 往往是一种解决透支问题的复杂方法 导致在不同情况下渲染工件。虽然它是 可以在应用程序清单中设置空窗口背景, 由于系统不能,这可能导致图形伪影 正确绘制起始窗口。一个更正确的方法来做到这一点 是将起始窗口背景留在清单中, 但是在activity的onCreate()方法中通过调用将其设置为null getWindow()的setBackground(空)。但即使这种方法也可能导致 文物。例如,如果键盘/ IME设置为adjustResize和 然后在那里为具有空背景的活动设置动画 可能是键盘后面的工件,因为它是动画的 窗口管理器没有任何东西可以为该背景绘制。也, 全屏列表视图可能具有过度弹跳反弹间隙的工件 (可以解决这个问题 ListView.setOverscrollFooter /报头())。
解决这种情况的透支问题的正确方法是 实际上使用起始窗口。而不是拥有容器 窗口背景和窗口之间自己不透明的背景颜色 视图,将您想要的背景绘制在窗口本身上 windowBackground主题属性让那些介入 容器保持默认的透明背景。