我正在尝试设置 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 。