【发布时间】:2014-03-01 02:31:03
【问题描述】:
我正在开发一个主题,通过将android:listSelector 设置为我编写的选择器来设置我的应用程序的 ListViews 样式:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/listitem_pressed" />
<item android:drawable="@drawable/listitem_selected" />
</selector>
这会更改在按下或选择时显示在单个列表项/行后面的背景。在这种情况下,listitem_pressed 是一个 9-Patch PNG,而 listitem_selected 是一个定义渐变的 XML 可绘制对象。这可行,但我注意到渐变占用了所有可用空间,而 PNG 周围有 4 或 5 像素的边距。
边距从何而来,为什么 PNG 的行为与 XML 可绘制对象不同?有没有一种简单的方法可以摆脱它?如果可能的话,我希望能够仅使用主题(在应用程序级别,在清单中指定)来设置我的应用程序的样式,而无需设置单个 ListView 实例的样式,覆盖ListAdapter.getView() 等。
【问题讨论】:
-
如果您没有在 9-patch 中明确定义内容区域,则系统会使用补丁区域隐式定义它,并相应地设置它的填充。如果要禁用填充,则明确定义内容区域以包含整个可绘制区域。
-
@corsair992 谢谢。我发现 9-patch 实际上有一个边距,但你的建议仍然有帮助。当我删除边距时,我发现背景正在“逃脱”其边界并与其他列表项重叠。显式设置内容区域解决了这个问题。
标签: android android-listview android-theme android-styles