android - 无法设置 colorControlNormal 和 android :textColor in style

标签 android android-edittext material-design android-theme android-styles

我正在尝试设置 Material EditText View 的样式:

<style name="AppTheme.EditText" parent="@style/Widget.AppCompat.EditText">
    <item name="android:textColor">@color/white</item>
    <item name="android:textColorHint">#8AFFFFFF</item>

    <item name="colorControlNormal">@color/white</item>
    <item name="colorControlActivated">@color/white</item>
    <item name="colorControlHighlight">@color/white</item>
</style>

然后我将样式应用到我的主题上:

<style name="AppTheme">
    <item name="editTextStyle">@style/AppTheme.EditText</item>
</style>

并将主题应用于 Activity :

  <activity
        android:name=".MyActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:windowSoftInputMode="stateAlwaysHidden"
        android:theme="@style/AppTheme">

但这并没有改变下划线颜色。

我知道我可以更改 accentColor 来更改下划线颜色,但我不想这样做,因为我需要我的强调色与其他一些控件不同。

我可以像这样设置控件下划线颜色吗?

最佳答案

它不起作用的原因: colorControlNormaltheme 的属性,而android:textColorstyle 属性。要更改 colorControlNormal,您必须覆盖 Theme,要更改 android:textColor 值,您必须覆盖 style. @style/Widget.AppCompat.EditText 或其任何父级中没有名为 colorControlNormal 的属性。因此,您在执行此操作时不会覆盖任何内容:

<style name="AppTheme.EditText" parent="@style/Widget.AppCompat.EditText">
    <item name="colorControlNormal">@color/white</item>
</style>

解决方案: 要实际更改 colorControlNormal 的值,您必须在主题中更改它。要在不更改 Activity 主题的情况下做到这一点,您可以:

1/创建一个仅包含您希望更改的主题属性的 ThemeOverlay:

<style name="AppTheme.EditText"> 
    <item name="colorControlNormal">@color/white</item>
</style>

2/仅在您的 EditText View 中使用它:

<EditText
    android:layout_width="match_parent"
    android:theme="@style/AppTheme.EditText"
/>

这里实际发生的是将使用 View 的主题属性(如果存在)。该 Activity 的主题将用作后备。

您可以随时更改 Activity 主题的 colorControlNormal 以影响整个 Activity 。

关于android - 无法设置 colorControlNormal 和 android :textColor in style,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41811868/

相关文章:

android - 带倒计时器的警报对话框

android - 如何在 Android(模拟器)中查找和清除 SQLite 数据库文件

android - 将 Android NDK 用于现有 iOS 应用程序

java - Mysql Android 连接错误

Android - 弹出键盘时调整屏幕?

twitter-bootstrap - Bootstrap 按钮中的 Google Material Icons 对齐方式

android - 如何在 EditText 中隐藏下划线

android - 空指针异常 - 获取 EditText 值

android - 如何使SearchView覆盖整个ActionBar/Toolbar

android - elevation=0dp 的 AppBarLayout 不响应触摸事件(点击)