2012-08-16 20 views
23

虽然在我的项目运行Android皮棉我碰到这个警告是“可能透支:根元素绘制背景”

可能透支:根元素绘制背景@绘制/主要与 一个主题,这也描绘了一个背景

其中推断的主题是@android:style/Theme.NoTitleBar.Fullscreen

有人能向我解释这是为什么来了,如何删除它?

我的XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:background="@drawable/main" //***LINT warning*** 
     android:orientation="vertical" 
     android:weightSum="3" > 

其中的主题被定义

<application 
     android:icon="@drawable/ic_logo" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > 

回答

16

要优化应用性能(避免透支)清单的一部分,您可以执行以下操作:

  • 申报主题res/values/styles.xml

    <style name="MyTheme" parent="android:Theme"> 
        <item name="android:background">@drawable/main</item> 
        <item name="android:windowNoTitle">true</item> 
        <item name="android:windowFullscreen">true</item> 
    </style> 
    

  • 变化的清单:

    <application 
        android:icon="@drawable/ic_logo" 
        android:label="@string/app_name" 
        android:theme="@style/MyTheme" > 
    
  • 删除 “我的XML” 的背景声明
+8

怎么样,如果我需要为应用程序的某些部分设置不同的背景? – Franco 2014-06-21 05:09:35

+2

@Franco只需为您的视图创建一个单独的样式,其中包含背景项目。我知道,这只是一个解决方法,所以你可以设置工具:ignore =“Overdraw”。 – Ov3r1oad 2014-07-29 12:35:23

+0

@Franco你可以让他们参与不同主题的不同活动。 – 2015-10-08 12:16:50

2

为什么你这个lint警告的原因是你的活动和你的线性布局都试图绘制背景。因此可见区域被绘制两次。

如何调试?运行sdk/tools/hierarchyviewer并检查视图层次结构以查看哪个视图具有未显示的背景。 (你需要有一个安卓设备运行开发构建ROM)

什么在引擎盖下运行?请注意,几乎所有的Android主题都有指定的背景,这意味着如果您希望创建一个覆盖整个屏幕和背景的“LinearLayout”,您最好设置activity的windowBackground =“@ null”或删除背景设置在线性布局。

11

更新

退房的评论或退房this link。正如马辛提到的,我的解决方案不是一个好方法,因为它可能会导致人为因素。我一直在使用它来避免长时间透支而没有任何问题,但根据Chet Haase对这种技术的评论,一般来说可能不是规则的大拇指。

原来的答复

我发现最好的方法是将其设置为null,则默认背景和应用您在每个布局所需要的背景。

原因是当您在主题中设置默认背景,或者如上面建议的不同主题背景不同时,这意味着整个布局将填充该背景。在大多数情况下,您不需要背景填充100%的屏幕,因为在背景上有工具栏,页眉,页脚和其他元素会导致透支。

要在主题应用空背景:

<style 
    name="ThemeName" parent="ParentTheme"> 
    <item name="android:windowBackground">@null</item> 
</style> 

要检查透支只是激活显示透支选项在模拟器/设备上的开发选项。不要相信100%lint警告,因为跟踪器中存在一些我不确定会完全修复的错误。

的更多信息: What is overdraw and why is an issue?

+0

这是你介绍的一个很好的推理,但请查看[开发Android版本号: 规则:用户界面](https://medium.com/google-developers/developing-for-android-viii-e91ced595fac)中的“避免空窗口背景”部分这种方法可能存在的缺点。 – 2015-09-14 08:55:24

+0

@Marcin Kozinski谢谢你,你是对的。 – Sotti 2015-09-14 09:30:02

+0

@Marcin与Chet的建议(使用默认背景)Altho是很难避免工具栏和其他布局元素透支,因为背景将始终匹配整个屏幕大小。 – Sotti 2015-09-14 09:44:24