如何在样式中使用textColorPrimary作为背景颜色?

我想创build一个使用android textColorPrimary作为背景颜色的样式。 我尝试了以下不起作用,结果是我的布局根本不显示。

 <style name="horizontalLine"> <item name="android:layout_width">fill_parent</item> <item name="android:layout_height">1dp</item> <item name="android:background">?android:attr/textColorPrimary</item> </style> 

如何在样式中使用textColorPrimary作为背景颜色?

Solutions Collecting From Web of "如何在样式中使用textColorPrimary作为背景颜色?"

在尝试使用属性时,该语法似乎适用于我:

 <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:textColor="?android:textColorPrimary" android:text="Hello"/> 

(要么)

 <style name="MyStyle"> <item name="android:textColor">?android:textColorPrimary</item> </style> 

我可以将应用程序主题从Holo更改为Holo.Light,文本颜色将自动更改为适合。

当我将它设置为View的背景时,它不起作用 – Android会崩溃抱怨可绘制的引用是一个状态列表,它不指定drawable(它是一个状态列表的颜色 )。

  Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #2: <item> tag requires a 'drawable' attribute or child tag defining a drawable at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:178) at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:885) at android.graphics.drawable.Drawable.createFromXml(Drawable.java:822) at android.content.res.Resources.loadDrawable(Resources.java:1950) ... 39 more 

我使用的是HoloEverywhere ,它可以让我直接引用资源,但在本地情况下,您应该会遇到类似的问题。 我不认为在状态列表xml中用作组件的主要的,非select的,未激活的(等)颜色是通过属性公开的。

在任何情况下,使用的文本颜色都取决于您,应用程序开发人员select的主题。 如果您select使用全息(黑暗)主题,那么您的文字将是一个浅色,用户将无法影响这一点。 您不需要为您的应用程序创builddynamic线条颜色。

我得到的错误消息是:

 org.xmlpull.v1.XmlPullParserException: Binary XML file line #18: <item> tag requires a 'drawable' attribute or child tag defining a drawable 

做一点挖掘,规范说background属性应该支持颜色,或引用可绘制的资源:

看看你引用的资源,它一个StateListDrawable

 platforms/android-17/data/res/color/primary_text_dark.xml <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:color="@android:color/bright_foreground_dark_disabled"/> <item android:state_window_focused="false" android:color="@android:color/bright_foreground_dark"/> <item android:state_pressed="true" android:color="@android:color/bright_foreground_dark_inverse"/> <item android:state_selected="true" android:color="@android:color/bright_foreground_dark_inverse"/> <item android:state_activated="true" android:color="@android:color/bright_foreground_dark_inverse"/> <item android:color="@android:color/bright_foreground_dark"/> <!-- not selected --> </selector> 

然而,StateListDrawable的文档也明确地说,必须为item元素定义drawable属性:

 https://developer.android.com/guide/topics/resources/drawable-resource.html <item> Defines a drawable to use during certain states, as described by its attributes. Must be a child of a <selector> element. attributes: android:drawable Drawable resource. Required. Reference to a drawable resource. 

对于primary_text_dark.xml而言,情况并非如此。 所以,它不工作,因为你引用的drawable似乎不符合规范。

我认为解决方法是引用在primary_text_dark使用的默认状态的颜色: bright_foreground_dark 。 看来这不是公开的,你需要直接find它所引用的那个:

 android:background="@android:color/background_light" 

我认为你要使用原生的android主要文字颜色。

 <item name="android:background">@android:color/primary_text_dark</item>