我正在尝试设置 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 来更改下划线颜色,但我不想这样做,因为我需要我的强调色与其他一些控件不同。
我可以像这样设置控件下划线颜色吗?
最佳答案
它不起作用的原因:
colorControlNormal
是theme 的属性,而android:textColor
是style 属性。要更改 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/