我正在尝试设置 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来更改下划线颜色,但是我不想这样做,因为我需要让某些其他控件的accentColor有所不同。

我可以像这样对控件的下划线颜色进行样式设置吗?

最佳答案

原因不起作用:colorControlNormal主题的属性,而android:textColor样式属性。要更改colorControlNormal,您必须覆盖主题,要更改android:textColor值,您必须覆盖样式colorControlNormal或其任何父级中没有名为@style/Widget.AppCompat.EditText的属性。因此,在执行此操作时,您什么都不做:

<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 。

09-11 17:56