重写 editTextStyle 不适用于最新的材质组件基本样式

2024-02-23

在我的应用程序中,我使用Theme.MaterialComponents.Light.NoActionBar作为基本样式。这种风格,我称之为AppTheme,我正在尝试覆盖editTextStyle提供自定义样式com.google.android.material.textfield.TextInputEditText(根据源代码,它使用R.attr.editTextStyle作为默认样式)。

这是我当前的主题,与 TIEditText 和 TILayout 相关:

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    [ primary and secondary colors, OnColors, etc.]
    <item name="editTextStyle">@style/AppTheme.TextInputEditText</item>
    <item name="textInputStyle">@style/AppTheme.TextInputLayout</item>

    [ Custom attribute for testing, defined in attrs.xml ]
    <item name="textInputEditTextStyle">@style/AppTheme.TextInputEditText</item>
</style>

由于某种原因,即使我设置editTextStyle,如果我在代码中使用它,它不会被应用:

<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/tilFirstName"
    style="?attr/textInputStyle"
    android:hint="@string/label_firstname"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <com.google.android.material.textfield.TextInputEditText
        android:id="@+id/firstName"
        style="?attr/editTextStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:text="@={viewModel.firstName}" />
</com.google.android.material.textfield.TextInputLayout>

但是如果我更换样式firstName with ?attr/textInputEditTextStyle, 有用。

为什么我不能覆盖editTextStyle在默认主题中?这到底是怎么回事?

Target SDK 为 28,minSDK 为 21,Material 库版本为1.1.0-alpha06


让我们跳过我们都认识到 Android 主题和样式是人类有史以来设计的最荒谬的黑客和猜测的荒原的部分。

这是对之前答案的扩展。同样愚蠢的“黑客”。我能够设计样式TextInputEditText通过设置editTextStyle,但不是它直观所属的地方,而是在自定义内部materialThemeOverlay嵌套在定义的样式中textInputStyle。证人:

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
    <!-- works fine -->
    <item name="textInputStyle">@style/AppTheme.TextInputLayoutStyle</item>
    <!-- should work fine, doesn't work, happily ignored -->
    <!-- <item name="editTextStyle">@style/AppTheme.TextInputEditTextStyle</item> -->
</style>

<style name="AppTheme.TextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
    <!-- other props (boxBackgroundMode, boxBackgroundColor, boxStrokeColor, etc) -->
    <!-- can we set editTextStyle from here? Of course not! We should magically know we need a material theme overlay-->
    <item name="materialThemeOverlay">@style/AppTheme.MaterialThemeOverlay</item>
</style>

<!-- style inception! a style, child of another style, whose only purpose is to refer to yet another style -->
<style name="AppTheme.MaterialThemeOverlay">
    <item name="editTextStyle">@style/AppTheme.TextInputEditTextStyle</item>
</style>

<!-- finally, the style we SHOULD have been able to set from the theme -->
<style name="AppTheme.TextInputEditTextStyle" parent="@style/Widget.MaterialComponents.TextInputEditText.OutlinedBox">
    <item name="android:textColor">@color/white</item>
</style>

所有上述荒谬的事情和我生命中的另一天都被扔进了垃圾桶,只是为了改变文字的颜色。啊啊啊啊啊安卓。

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

重写 editTextStyle 不适用于最新的材质组件基本样式 的相关文章

  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • 在哪里存储 Java 的 .properties 文件?

    The Java教程 http download oracle com javase tutorial essential environment properties htmlon using Properties 讨论如何使用 Prop
  • 在 GWT 中,在任何主机页标记上添加事件处理程序

    我想为任何标签添加 MouseOver 事件处理程序 举个例子 我想为旧版 HTML 页面中的每个锚点页面添加事件处理程序 继GWT指南 http code google com webtoolkit doc 1 6 DevGuideUse
  • 没有 OAuth 的 Spring Security JWT

    最近我开始学习如何使用oauth 2 0 jwt配置spring boot 我有一个问题 是否可以使用spring boot security jwt避免oauth 2 0 是的 可以使用JWT无需使用标准化的功能OAuth 2 0 flo
  • ngmodel与Angular2中复选框的动态数组绑定

    我有一个 Angular 2 组件 其中我从数组生成复选框列表 现在我需要根据选中的复选框填充不同的数组 这应该是双向绑定 这意味着如果复选框的值已在数组中 则必须已经检查了复选框 我在 Angular 1 中使用了一个名为 checkli
  • 闪亮井板宽度

    library shiny library shinydashboard ui lt dashboardPage dashboardHeader dashboardSidebar dashboardBody wellPanel tags d
  • Android ScrollView fillViewport 不工作

    我有一个简单的布局 名称位于顶部 按钮位于屏幕底部 或者超出该按钮 以防我添加更多项目 所以我使用带有 LinearLayout 的 ScrollView 如下所示
  • Scrapy Spider不存储状态(持久状态)

    您好 有一个基本的蜘蛛 可以运行以获取给定域上的所有链接 我想确保它保持其状态 以便它可以从离开的位置恢复 我已按照给定的网址进行操作http doc scrapy org en latest topics jobs html http d
  • 在 Android 中使用 iText 将图像添加到特定位置

    我想使用 Android 中的 iText 将图像添加到 PDF 文件中的特定位置 这是一个可填写的表单 我添加了作为图像占位符的文本框 我想要做的就是像这样获取该文本框和图像 public class FormFill public st
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • Typescript 函数接口重载

    我有以下代码 interface MySecondInterface a type A interface MyInterface val1 string val2 string MySecondInterface a
  • 从 Azure 应用服务连接到 MongoDB Atlas 集群

    我在 Azure 上有一个 Web 应用程序 它连接到 Atlas cloud mongodb com 上托管的 MongoDB 集群 我想使用 Atlas 这样我就不必关心 MongoDb 配置 问题是我的集群连接超时 我必须在我的 mo
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder
  • Android:如何检测手机设置中的语言已更改

    我如何检测我的手机语言是否已更改 例如 Facebook 应用程序将向我们宣布 please wait we preparing your language i used myString Locale getDefault getDisp
  • Android 和 Java 中绘制椭圆的区别

    在Java中由于某种原因Ellipse2D Double使用参数 height width x y 当我创建一个RectF在Android中参数是 left top right bottom 所以我对适应差异有点困惑 如果在 Java 中创
  • 保存符号方程以供以后使用?

    From here http www mathworks com help releases R2011a toolbox symbolic brvfu8o 1 html brvfxem 1 我正在尝试求解这样的符号方程组 syms x y
  • 当ScrollView滚动到底部时加载更多数据

    我有一个带有动态加载内容的滚动视图 有时可能会有很多内容 所以我想在用户滚动到底部时加载更多内容 我搜索了合适的方法 发现了两种 onScrollChanged and getScrollY 但我不知道如何将它用于我的目的 请给我一些建议
  • 如果产品重量超过1000克,如何以公斤为单位显示

    在 Storefront 主题中 我使用下面的代码将格式化重量从 1000g 更改为 1kg add action woocommerce after shop loop item title show weight 10 function
  • android ndk 硬件调试内存

    背景 我对 C 很有经验 对 Android 和 Java 还很陌生 但这是编程的环境问题 我已经用 ANSI C 开发了一个管理应用程序 可以移植到任何操作系统 只需在依赖于操作系统的代码中添加 UI 即可 它使用相当多的内存 特别是对于
  • CUDA 中指令重放的其他原因

    这是我从 nvprof CUDA 5 5 获得的输出 Invocations Metric Name Metric Description Min Max Avg Device Tesla K40c 0 Kernel MyKernel do

随机推荐

  • 我可以将现有 NuGet 包上传到 Azure DevOps 工件源吗?

    我目前正在从 TFS 2012 迁移到 Azure DevOps 2019 均为本地部署 使用旧服务器 我会从我们的一些构建中手动创建 NuGet 包 并托管这些包 nupkg文件共享上的文件 在 Visual Studio 中配置为包源
  • “无法初始化类 com.ibm.icu.impl.JavaTimeZone”是什么意思?

    发生错误 有关更多详细信息 请参阅错误日志 无法初始化类 com ibm icu impl JavaTimeZone 看看 http bugs debian org cgi bin bugreport cgi bug 600288 http
  • 如何使用 rxjs 5 观察对象变化

    我想监视一个对象 这样所有订阅者都会收到它的任何更改 我看到已经是了之前问过 https stackoverflow com questions 32683488 rxjs observing object updates and chan
  • 在 update() 转换期间绑定事件

    是否可以在转换期间将事件绑定到选择 例如 假设这是您的更新 g3 selectAll circles data dataFiltered function d return d token transition delay circleDe
  • 如何将一串键/值对转换为 HashTable 或 Dictionary 或者?

    在 VB NET 中 如何将以下字符串转换为某种键 值类型 例如哈希表 字典等 Name Fred Birthday 19 June 1906 ID 12345 我想提取生日或 ID 而不必将字符串拆分为数组 编辑 我不想将字符串拆分为数组
  • 在片段 android 的 CursorLoader 中显示进度对话框

    美好的一天 正如标题所说 任何人都知道如何在从片段内的 CursorLoader 加载数据时实现进度对话框 找不到这方面的任何例子 任何有关如何操作的链接或指南将受到高度赞赏 谢谢 我认为 Michal 的解决方案非常适合通过以下方式显示不
  • MySQL STR_TO_DATE() 函数返回 null

    我想将日期格式转换为MMMM dd yyyy to yyyy MM dd 我尝试使用以下内容 SET dt to STR TO DATE dateTo d m Y 但返回一个NULL value 我如何将我的日期转换为yyyy MM ddM
  • WPF - 将位图转换为 ImageSource

    我需要转换一个System Drawing Bitmap into System Windows Media ImageSource类 以便将其绑定到 WizardPage 扩展 WPF 工具包 的 HeaderImage 控件中 位图被设
  • 行列反转所形成的矩阵左上象限的最大和

    我正在研究一个 HackerRank 问题 该问题在反转行和列后找到 2N x 2N 矩阵的左上象限中元素的最大总和 例如 如果矩阵是 M 112 42 83 119 56 125 56 49 15 78 101 43 62 98 114
  • 强制 JSON.NET 将 xml 转换为 json 数组 [重复]

    这个问题在这里已经有答案了 我正在使用 JSON NET 将一些 XML 转换为 JSON 我的 XML 看起来像这样
  • 在 Woocommerce 中仅显示特定客户所在国家/地区的价格

    我已经使用 woocommerce 开发了一个目录 但是我需要能够对从英国境外访问该网站的用户隐藏产品价格由于我无法控制的原因 我找到了一些插件 可以让我根据访问者位置更改产品价格 但没有任何插件可以让我隐藏价格 是否有任何我错过的插件或任
  • GlobalFilter 与 WebFilter

    我正在 Spring Cloud Gateway 中迈出第一步 在学习过程中 我想更好地了解GlobalFilter 具体来说 我打算每次都应用一些过滤器every route 阅读文档 参考 https cloud spring io s
  • 当表单具有背景图像时,如何解决控件不必要的闪烁?

    问题概述 当我尝试隐藏一些标签 文本框和按钮时 我遇到了这个问题 所有这些控件在隐藏时都会闪烁 但其他不涉及的控件都很好 我不想要这种效果 另外 这不会发生在Show 仅发生在Hide 我尝试过的 删除背景图像解决了这个问题 但我确实希望我
  • 在 iOS 8 上使用 NSKeyedUnarchiver 取消存档 UIImage 对象返回 CGSizeZero 图像

    我的代码在 iOS 7 上运行 NSData imageData NSKeyedArchiver archivedDataWithRootObject self imageView image UIImage imageCopy NSKey
  • 如何在 PHP 8.0 中使用 ssh2?

    在安装 php 8 更新之前 我通读了所有不兼容性 只是发现为时已晚 我还没有找到对 ssh2 扩展的支持 我希望我只是错过了一些东西 我已经用谷歌搜索了几个小时 所有可能的线索都没有找到 谁能告诉我 ssh2 扩展的 php 8 版本吗
  • Spring在单元测试中嵌入了ldap服务器

    我目前正在尝试使用嵌入式 LDAP 服务器进行单元测试 在 Spring Security 中 您可以快速定义一个嵌入式 ldap 服务器 以便使用标签以及从指定 ldif 加载的一些示例数据进行测试 我将使用 Spring Ldap 执行
  • 致命错误,因为传递的是 Error 实例而不是预期的 Exception 实例

    我刚刚安装了 xampp 和 php 7 0 4 以及新的 cakephp 3 2 6 我做了很多研究 我发现的一切都表明它们是兼容的 然而 当我用浏览器打开应用程序时 蛋糕就会回复内部错误 关于要做什么的唯一指示是 xampp 在 apa
  • 获取当前背景

    我想获取当前的背景并以此为基础做一个条件 例如 我有一个带有下一个箭头的xml 如果背景 R drawable A 我想在按下下一个按钮时将背景更改为R drawable B 我定义了我的相对布局如下 final RelativeLayou
  • python中a=b=c是什么? [复制]

    这个问题在这里已经有答案了 我很困惑 连续相等 可以在 python 中使用 例如 a b c 这个语言特性叫什么 有什么我可以读到的吗 能化成4个等号吗 a b c d 这只是一种声明方式a and b等于c gt gt gt c 2 g
  • 重写 editTextStyle 不适用于最新的材质组件基本样式

    在我的应用程序中 我使用Theme MaterialComponents Light NoActionBar作为基本样式 这种风格 我称之为AppTheme 我正在尝试覆盖editTextStyle提供自定义样式com google and