无法在样式中设置colorControlNormal和android:textColor

los*_*ion 8 android android-theme android-edittext android-styles material-design

我正在尝试设置材质EditText视图的样式:

<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>
Run Code Online (Sandbox Code Playgroud)

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

<style name="AppTheme">
    <item name="editTextStyle">@style/AppTheme.EditText</item>
</style>
Run Code Online (Sandbox Code Playgroud)

并将主题应用于活动:

  <activity
        android:name=".MyActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:windowSoftInputMode="stateAlwaysHidden"
        android:theme="@style/AppTheme">
Run Code Online (Sandbox Code Playgroud)

但是,这并没有改变下划线颜色.

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

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

Tin*_*ran 29

原因,它不工作: colorControlNormal是的ATTR 主题,同时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>
Run Code Online (Sandbox Code Playgroud)

解决方案: 要实际更改值colorControlNormal,您必须在主题中更改它.要在不更改活动主题的情况下执行此操作,您可以:

1 /创建仅包含您要更改的主题属性的ThemeOverlay:

<style name="AppTheme.EditText"> 
    <item name="colorControlNormal">@color/white</item>
</style>
Run Code Online (Sandbox Code Playgroud)

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

<EditText
    android:layout_width="match_parent"
    android:theme="@style/AppTheme.EditText"
/>
Run Code Online (Sandbox Code Playgroud)

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

您可以随时更改colorControlNormal活动的主题以影响整个活动.