android:attr样式是如何工作的?

android:attr样式是如何工作的?,android,Android,我正试图通过布局构建一个Android用户界面。我从以下几点开始: <TextView android:id="@+id/..." android:layout_marginTop="8dip" android:text="..." style="?android:attr/listSeparatorTextViewStyle"/> <TextView android:id="@+id/..." android:layout_m

我正试图通过布局构建一个Android用户界面。我从以下几点开始:

<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"/>
这看起来很好,所有的大写字母,更小的字体,下面的分隔条。现在我想扩展样式,因此我将其更改为以下内容:

<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>
这不起作用字体是正确的,但是分隔线消失了

为什么。。。当您使用以下各项时:

style="?android:attr/listSeparatorTextViewStyle"
您正在使用此AttributeListSeparatorExtViewStyle指向的样式。如果查看platform themes.xml,您将看到该属性实际使用的样式是Widget.TextView.ListSeparator.White。因此,这是您应该在自定义样式中扩展的样式


不幸的是,这种风格是私有的,您不能扩展它,或者您不应该扩展它以供参考,请参见google。您最好的选择是复制整个样式,Widget.TextView.ListSeparator.WhiteWidget.TextView.ListSeparator也不是公共的,因此您还必须以自定义样式复制该样式,并使用该样式,而不是从android平台扩展样式。请参阅上面的链接。

这完全有意义。但这似乎是一个丑陋的解决方案。为了与系统风格相匹配,我必须为每个版本的Android提供一种可能不同的风格,如果制造商以蒙皮的名义更改了这种风格,我运气不好,只是无法匹配该设备的系统样式。@Hounshell您可以使用自定义主题,并为ListSeparatorExtViewStyle属性设置自己的样式。这样,你自己的风格将出现在每个android平台上。当然,这仍然会使您容易受到手机制造商更改某些样式的影响唯一真正的问题是背景可绘制属性。您没有说明布局是如何使用此样式的,但请记住,用户可能会在应用程序中看到某些UI差异。@GopalingSirvi您可以查看sdk中的文件themes.xml和styles.xml。事实上,此属性所指的样式依赖于主题。Widget.TextView.ListSeparator.White是Theme.Holo.Light主题映射到的内容,其他主题将有所不同。