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

2024-05-09

我使用每个按钮上的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。

我需要做什么才能更改按钮的文本颜色?

EDIT:我尝试在每个元素上应用颜色并且它有效,但我想通过覆盖样式文件中的颜色来更改它(将所有设计属性保留在一处,类似于 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>

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


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

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

但更重要的是,Activity 仅使用诸如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"/>

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • Find() 的 Javascript 代码优化

    我有 C 代码 可以在 SQL 中运行查询并返回大约 2000 行 然后创建一个Treeview控件并添加到我的主页 这几乎是立即完成的 这很好 var orgId select name ctl00 PageContent Functio
  • 如何更改 Google 表格中图表的背景不透明度?

    我想在 Google 表格中设置 Google 图表的透明度或不透明度 就像在 Microsoft Excel 中一样 将图像设置在文本后面 以便文本仍然可读 不过好像该功能不起作用 功能预览 http drive google com f
  • 保存到服务器后,隐藏字符“\u0”添加到文件中

    我正在使用 Apache 服务器为 Web 开发网站提供服务 这样我就可以不断保存和编辑文件 我使用 Gulp for Sass 来连接和丑化 css 和 js 文件 一个月前 我的 js 和 css 文件遇到问题 似乎在文件下面添加了随机
  • 在Web应用程序中调用phonegap插件功能

    我正在构建我的第一个phonegap应用程序 当我打开该应用程序时 我立即将用户重定向 window location 到托管我的网络应用程序的服务器 是否可以从那里加载phonegap 插件 因为 deviceready 事件没有触发 我
  • PIL 不保存透明度

    from PIL import Image img Image open 1 png img save 2 png 第一张图像具有透明背景 但是当我保存它时 透明度消失了 背景为白色 我究竟做错了什么 可能图像已被索引 PIL 中的模式 P
  • Mnesia:如何同时锁定多行,以便我可以写入/读取一组“一致”的记录

    我多么希望我一开始就能表达我的问题 取一个包含 26 个键 a z 的表 并让它们具有整数值 创建一个流程 哎哟 一遍又一遍地做两件事 在一笔交易中 写入随机值a b and c使得这些值always总和为 10 在另一个事务中 读取值a
  • 交换两个向量之间的值,使两个向量的 max_element 之和最小

    这是 Codechef 的问题 但请耐心等待 https www codechef com ZCOPRAC problems ZCO16001 https www codechef com ZCOPRAC problems ZCO16001
  • SavedStateHandle不持久化数据

    我按照下一页中的说明创建了一个 viewModel 但是SavedStateHandle当我关闭应用程序并再次打开它时不起作用 这是页面 ViewModel 的已保存状态模块 https developer android com topi
  • 图片无法直接上传到相册

    我正在开发上传图片文件的应用程序 但图片不能直接上传到相册 上传之前始终必须经过批准 如何解决这个问题 问题 您想将这些照片添加到您的相册吗 下面的照片是从另一个应用程序上传的 您需要批准它们 你需要user photos允许直接上传到相册
  • 处理 EF 存储过程的多个结果集的通用方法

    EF 6 NET 4 51 我正在尝试构建一个通用帮助程序类 它将帮助我将每个结果集 翻译 为类型安全类 如此处所述使用 SqlQuery 处理存储过程的多个结果 https stackoverflow com questions 2530
  • 使用 Gravity Forms 和 Javascript 计算一个输入字段的长度并在另一个输入字段中打印它

    我正在使用 WordPress 的重力形式 我试图弄清楚如何计算用户在我的一个输入框中键入的字符的长度 并将该数字以相同的形式打印到另一个输入框 我认为这可以用 Javascript 来完成 但我是一个完全的新手 这是我非常淡化的努力 只是
  • EditText.setError 不显示错误文本,仅显示图标

    我的应用程序中有一个简单的验证 这里我使用了四个EdtiText 我显示错误时EditTex不会失去焦点 但问题在于失去焦点EditText只显示图标 没有错误消息 我尝试过使用requestFocus 方法 现在可以看到错误 但问题是 现
  • Dojo 动态填充组合框小部件

    有人可以向我解释一下为什么这个简单的直接代码不起作用 var serviceStore new dojo data ItemFileWriteStore data identifier serviceCode items jsonObj i
  • TFS 构建失败,文件“无法复制文件”,甚至不在项目中

    我已经设置了 TFS Build 直到昨天为止都运行良好 从那时起 我从一个项目中收到以下错误 C Program Files x86 MSBuild Microsoft VisualStudio v11 0 WebApplications
  • 如何考虑折叠边距来计算元素的高度

    我想计算 div 元素的总 高度 考虑到崩溃了 http www w3 org TR CSS2 box html collapsing margins margins http reference sitepoint com css col
  • 我应该如何使用 jcrop 在客户端裁剪图像并上传?

    我正在开发一个包含文件上传 HTML 控件的组件 在使用文件上传元素选择图像后 该图像将呈现在 HTML5 Canvas 元素上 这是带有示例代码的 JSFiddle https jsfiddle net govi20 spmc7ymp h
  • 如何在byte[]中制作csv?

    我想知道我应该如何创建一个在 byte 中创建 csv 文件的方法 目前我正在使用这样的东西 public byte makeCsv StringBuffer csv new StringBuffer csv append columnhe
  • plsql编译时如何避免Σ变成S?

    我们正在尝试在 pl sql 包中使用 符号 当我们编译包并执行时 符号变成 S 有什么方法可以避免这种情况吗 这是一个例子 declare Local variables here i varchar2 10 begin dbms out
  • 为什么我不能在 Python 的新线程中创建 COM 对象?

    我正在尝试在 Python 的新线程中从 dll 创建 COM 对象 这样我就可以在该线程中运行消息泵 from comtypes client import CreateObject import threading class Mess
  • 覆盖按钮的文本颜色不起作用

    我使用每个按钮上的buttonBarStyle 和布局上的buttonBarButtonStyle 为按钮栏创建了一个自定义主题 它工作正常 但我想更改按钮的文本颜色 但它仍然采用默认颜色 android color primary tex