android:attr风格如何工作?

时间:2012-06-03 09:24:41

标签: android

我正在尝试通过布局构建Android UI。我从以下开始:

<TextView
    android:id="@+id/..."
    android:layout_marginTop="8dip"
    android:text="..."
    style="?android:attr/listSeparatorTextViewStyle"/>

看起来不错(所有大写字母,较小的字体,下方的分隔栏)。现在我想扩展样式,所以我将其更改为以下内容:

<TextView
    android:id="@+id/..."
    android:layout_marginTop="8dip"
    android:text="..."
    style="@style/section_title"/>

风格为:

<style name="section_title" parent="@android:attr/listSeparatorTextViewStyle">
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">wrap_content</item>
</style>

这不起作用(字体是正确的,但分隔线已经消失)。

为什么......那个?

1 个答案:

答案 0 :(得分:22)

当你使用时:

style="?android:attr/listSeparatorTextViewStyle"

您正在使用此属性指向的样式(listSeparatorTextViewStyle)。如果您查看平台themes.xml,您会看到实际用于此属性的样式为Widget.TextView.ListSeparator.White。所以这是您应该在自定义样式中扩展的style

不幸的是,该样式是私有的,您无法扩展它,或者您不应该扩展它(作为参考,请参阅Google的this bug report)。您最好的选择是复制整个样式,Widget.TextView.ListSeparator.WhiteWidget.TextView.ListSeparator也不公开,因此也必须复制它),在您的自定义样式中使用它而不是扩展样式android平台(参见上面链接中的this response)。