覆盖不起作用的按钮的文本颜色

时间:2014-02-03 21:49:31

标签: android colors android-button android-theme textcolor

我使用每个按钮上的buttonBarStyle和布局上的buttonBarButtonStyle为按钮栏创建了一个自定义主题。 它工作正常,但我想更改按钮的文本颜色,但它仍然采用默认颜色(@android:color / primary_text_holo_light) 我的代码是:

<style name="ButtonBarTheme" parent="AppTheme">
        <item name="buttonBarStyle">?android:attr/buttonBarStyle</item>
        <item name="buttonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
        <item name="android:textColor">#ffffff</item>
</style>

对于布局:

<LinearLayout 
    style="?android:attr/buttonBarStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#0090cc"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/bar_button1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        style="@style/ButtonBarStyleButton"
        android:text="Button 1" />

    <Button
        android:id="@+id/bar_button2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        style="?android:attr/buttonBarButtonStyle"
        android:text="Button 2" />

</LinearLayout>

AppTheme有父AppBaseTheme,它有父android:Theme.Holo.Light.DarkActionBar。

如何更改按钮的文字颜色?

修改 我尝试在每个元素上应用颜色并且它有效,但我想通过覆盖样式文件中的颜色来更改它(将所有设计属性保存在一个地方,类似于CSS)。

另外,我试图创建一个具有?android:attr / buttonBarStyle“

属性的样式
   <style name="ButtonBarStyleButtonBase">
        <item name="buttonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
    </style>

   <style name="ButtonBarStyleButton" parent="ButtonBarStyleButtonBase">
        <item name="android:textColor">#ffFFff</item>
    </style>

但它的行为很奇怪:颜色已更新,但父样式中没有属性可见。

2 个答案:

答案 0 :(得分:4)

我想在这个答案前言,说我不完全明白按钮栏是什么。除了为它们定义一些样式属性之外,android开发者文档似乎没有提及它们,因此我不确定它们如何映射到实际的视图/窗口小部件。

我相信正在发生的事情是你错过了Style和Theme之间的区别。样式应用于视图以定义其属性。主题应用于整个应用程序或单个活动,并且能够为应用主题的应用程序/活动中显示的视图定义默认样式(以及其他内容)。

更重要的是,button只会使用buttonBarStyle和buttonBarButtonStyle等属性来解析按钮栏中按钮栏和按钮的默认样式。由于这些属性仅由Activity解析,因此如果直接应用于您的视图,它们将被忽略。

因此,如果要使用主题来应用样式,则需要创建一个新的样式定义,该定义扩展所需的基本样式,然后将该自定义样式分配回主题定义中的相应“视图样式”属性。 / p>

<style name="CustomButtonStyle" parent="@android:attr/buttonStyle">
        <item name="android:textColor">#ffffff</item>
</style>


<style name="AppTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar">
        <item name="buttonStyle">@style/CustomButtonStyle</item>
</style>


<application
    ...
    android:theme="@style/AppTheme" >

没有明确样式属性的所有按钮现在都将显示为白色文本。

但是,对于想要显示带有ButtonBar样式的按钮的特殊情况,您应该注意ButtonBar样式不会自动应用于您的按钮。您必须手动定义要与该样式一起显示的按钮。因此,上面的示例现在看起来更像是这样:

<style name="CustomButtonBarStyle" parent="@android:attr/buttonBarStyle">
        <item name="android:textColor">#ffffff</item>
</style>


<style name="AppTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar">
        <item name="buttonBarStyle">@style/CustomButtonBarStyle</item>
</style>


<application
    ...
    android:theme="@style/AppTheme" >

现在应用您为当前主题定义的ButtonBar样式:

<Button
        ...
        style="?android:attr/buttonBarStyle"/>

请注意,这将应用为当前主题定义的ButtonBar样式(除非它被Activity覆盖,否则它将在整个应用程序中相同)。另请注意,因为您正在引用为当前主题定义的样式,所以它允许您根据所需的资源限定符以不同方式定义当前主题,而无需更改布局代码。

答案 1 :(得分:0)

我尝试了这里给出的其他解决方案,没有运气。尝试使用私有样式(在本例中为android:attr / buttonBarStyle)作为父级会产生错误。

在buttonBarStyle下更改按钮颜色问题的解决方案是通过为按钮指定背景来为自己重新创建android:attr / buttonBarStyle:

android:background="?android:attr/selectableItemBackground"

然后指定:

android:textColor="@color/your_color"

可以正确地改变按钮的文字颜色,同时保留buttonBarButtonStyle的外观。