【发布时间】:2017-04-18 07:59:09
【问题描述】:
我最近遇到一个问题,就是将edittext的默认下划线从默认的黑色改为白色。
我使用了这个解决方案,在我看来这是通过更改 EditText 的样式的最佳实践:
编辑文本
<android.support.v7.widget.AppCompatEditText
android:id="@+id/nom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/Activity_Main_EditText_Nom"
android:imeOptions="actionNext"
android:paddingBottom="10dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="10dp"
android:textColor="@android:color/white"
android:textColorHint="@color/activityBackground"
android:theme="@style/EditTextStyle"
android:visibility="gone"
/>
style.xml
<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowDisablePreview">true</item>
<item name="android:windowBackground">@color/activityBackground</item>
<item name="windowActionBar">false</item>
<item name="actionMenuTextColor">@android:color/white</item>
<item name="android:windowNoTitle">true</item>
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="EditTextStyle" parent="Widget.AppCompat.EditText">
<item name="colorControlNormal">@android:color/white</item>
<item name="colorControlActivated">@color/colorAccent</item>
<item name="colorControlHighlight">@color/colorAccent</item>
</style>
成功了!但它还在 EditText 的句柄中添加了一个下划线...
有什么想法吗?
回答
通过与@rafsanahmad007的讨论,我们终于得到了最终的解决方案。
style.xml
<resources>
<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowDisablePreview">true</item>
<item name="android:windowBackground">@color/activityBackground</item>
<item name="windowActionBar">false</item>
<item name="actionMenuTextColor">@android:color/white</item>
<item name="android:windowNoTitle">true</item>
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="MyTheme.EditText" parent="MyTheme">
<item name="colorControlNormal">@android:color/white</item>
<item name="colorControlActivated">@color/colorAccent</item>
<item name="colorControlHighlight">@color/colorAccent</item>
</style>
</resources>
像往常一样将MyTheme 应用于应用程序。当您想调整 EditText 时,只需添加即可:
编辑文本
<EditText
...
android:theme="@style/MyTheme.EditText"
...
/>
【问题讨论】:
-
@visheshchandra 感谢您提供此链接,这些处理程序/指标/光标有很多名称,我没有遇到过这个!不幸的是,更改 EditText 的颜色过滤器会带来一些问题,例如在选中时禁用从白色到 colorAccent 的颜色变化等。
-
一般提示:除非你想继承
EditText,否则你不需要使用AppCompatEditText。 -
@Sufian 没错,我之前使用了一些
app:属性,所以我需要AppCompatEditText,但现在我可能会切换回EditText。 -
这可能是因为您使用的是
android:theme。如果您设置style而不是android:theme,手柄的下划线会消失吗?