问题描述
我已经实现了可点击的Recyclerview
项目,并为点击效果设置了android:background="?selectableItemBackground"
,但在检查代码时我发现了这个lint问题。
Lint警告:可能的透支:根元素绘制背景?selectableItemBackground
,主题也绘制背景
有什么想法解决这个警告?
我的xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?selectableItemBackground"
android:clickable="true"
android:orientation="vertical"
android:padding="@dimen/row_padding">
//...
</LinearLayout >
1楼
默认情况下,主题具有指定的android:windowBackground
属性,顾名思义,它指定窗口的背景,您的活动将在其中启动。
这个棉绒警告只是告诉你如下:
嘿! 我看到你的主题应用了一个
windowBackground
,你的根布局在窗口背景上绘制了一些其他的drawable,使得窗口的背景毫无意义 - 因此不必要地过度绘制像素。
淘汰windowBackground
会让lint不要抱怨:
<style name="AppTheme" parent="...">
...
<item name="android:windowBackground">@null</item>
</style>
2楼
您应该将纹波放在前景属性上
3楼
我会删除lint检查。 对大多数应用程序进行x1透支是完全可以接受的。
有关Romain Guy的透支和表现的非常好的帖子: : 。
在主题中设置<item name="android:windowBackground">@null</item>
是错误的,因为它将删除您的活动启动动画(有关启动动画的详细信息,请参阅该帖子: : )。
你不应该这样做。
在Activity.onCreate()中设置getWindow().setBackgroundDrawable(null)
是可行的,但是你必须确保应用程序中的每个像素至少被绘制一次,因为你将不再有背景来绘制。
对于非常有限的收益来说,这是有潜在危险的。