当前位置: 首页 > 知识库问答 >
问题:

替代不工作按钮的文本颜色

臧正平
2023-03-14

我为按钮栏创建了一个自定义主题,在每个按钮上使用按钮BarStyle,在布局上使用按钮BarButtonStyle。它工作正常,但我想更改按钮的文本颜色,但它仍然需要默认颜色(@android:颜色/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:主题。全息。光。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个答案

景德海
2023-03-14

我尝试了这里给出的另一个解决方案,但没有成功。尝试使用私有样式(在本例中为android:attr/ButtonBarStyle)作为父样式会出错。

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

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

然后指定:

android:textColor="@color/your_color"

这将正确更改按钮的文本颜色,同时保留buttonBarButtonStyle的外观。

居星阑
2023-03-14

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

我相信现在的情况是你忽略了风格和主题之间的区别。样式应用于视图以定义其属性。主题应用于整个应用程序或单个活动,并提供为应用主题的应用程序/活动中显示的视图定义默认样式的能力(除其他外)。

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

因此,如果您想使用主题来应用您的样式,您需要创建一个新的样式定义来扩展所需的基本样式,然后将该自定义样式分配回主题定义中适当的视图样式属性。

<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"/>

请注意,这将应用为当前主题定义的按钮栏样式(除非它被活动覆盖,否则在整个应用程序中都是一样的)。还要注意,因为您引用的是为当前主题定义的样式,它允许您根据所需的资源限定符不同地定义当前主题,而无需更改布局代码。

 类似资料:
  • 我有一个问题使添加到购物车按钮工作。不确定是哪一部分代码导致了这个问题。但是,问题的链接是:https://barkerbespoke.com/collections/tie-collection/products/black-wool 你有什么建议?

  • 所以我在我的一个程序中使用cardLayout,我试图使它成为当你点击一个按钮时下一个面板加载。我有一个panelHolder类,其中保存了cardlayout,每次按下面板上的按钮时,它都会调用panelHolder类中的一个方法,该方法根据按钮将某个布尔变量设置为true,并调用repaint(其中显示了面板)。由于某种原因,我的按钮坏了,我似乎找不出原因。有人能帮帮我吗?

  • 我面临commandButton的问题,它只有在类型为submit时才起作用。有没有人可以看一下,让我知道是否有解决办法?下面的代码非常简单,并有足够的建议来说明我需要什么。方法test()未执行。方法runSubmit已成功执行。 我需要测试方法在没有提交的情况下执行,因为原始页面确实在提交期间执行了验证,test()方法必须在没有提交的情况下执行,因为这是提交之前的一个初步操作。 我正在使用P

  • 参考:如何在颜色状态列表资源中指定背景颜色? 我已经按照上面链接中流行的答案。 我有以下绘图; 我理解,它将始终遵循优先顺序,因此在当前顺序中,只有激活和停用可能被触发。然而,目前我没有得到任何结果 我的按钮; 按钮显示为白色,在我的材质主题中,这是色彩主属性 首先,我假设一个主题覆盖了整个应用程序,但如果你明确指定一个特定按钮的背景,它应该覆盖主题值,如果我错了,请纠正我。 我从res/colo

  • 我是Python新手,对GUI编程更是新手。 我有一个按钮和两个旋转箱,我想在点击开始按钮后禁用它们。我在谷歌上搜索了5种禁用Tkinter按钮的不同方法,但似乎都不起作用。理论上,旋转箱应该以同样的方式被禁用,但我只是运气不好。对整个图形用户界面感到非常沮丧。 和是两个spinbox 正如您所看到的,我尝试对按钮使用,但它不起作用。我见过各种各样的代码,在所有的大写字母、大写字母和不同的引号中都

  • 我一直在写一个小的登录servlet。登录部分工作得很好,但当我按下logout submit按钮时--什么也没有发生。 Servlet代码下面是: 有谁能帮我找出出了什么问题吗?我是JSP和Java servlet的新手。