【问题标题】:Handles of EditText are underlinedEditText 的句柄带有下划线
【发布时间】: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"
     ...
/>

【问题讨论】:

  • 你可以查看这个答案stackoverflow.com/questions/37824790/…
  • @visheshchandra 感谢您提供此链接,这些处理程序/指标/光标有很多名称,我没有遇到过这个!不幸的是,更改 EditText 的颜色过滤器会带来一些问题,例如在选中时禁用从白色到 colorAccent 的颜色变化等。
  • 一般提示:除非你想继承EditText,否则你不需要使用AppCompatEditText
  • @Sufian 没错,我之前使用了一些app: 属性,所以我需要AppCompatEditText,但现在我可能会切换回EditText
  • 这可能是因为您使用的是android:theme。如果您设置style 而不是android:theme,手柄的下划线会消失吗?

标签: android android-edittext


【解决方案1】:

问题在于您的样式主题.. 父母

使用下面的代码:

<android.support.v7.widget.AppCompatEditText
    android:theme="@style/MyStyle.EditText"/>

现在在你的styles.xml中

 <style name="MyStyle.EditText">
    <item name="editTextStyle">@style/MyEditTextStyle</item>
</style>

<style name="MyEditTextStyle" parent="Widget.AppCompat.EditText">
    <item name="colorControlNormal">@android:color/white</item>
    <item name="colorControlActivated">@color/colorAccent</item>
    <item name="colorControlHighlight">@color/colorAccent</item>
</style>

尽量不要直接使用主题父类

编辑

在基础主题中添加颜色属性

 <style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorControlNormal">@android:color/white</item>
    <item name="colorControlActivated">@color/colorAccent</item>
    <item name="colorControlHighlight">@color/colorAccent</item>
</style>

确保您在清单中的活动中选择主题...

【讨论】:

  • 句柄的下划线消失了,但是EditText的下划线在没有选中的时候不是白色的。我错过了什么吗?
  • 使用editText.getBackground().setColorFilter(R.color.white, PorterDuff.Mode.SRC_IN);...作为下划线颜色..
  • 设置 ColorFilter 禁用在选择 EditText 时颜色从白色变为 colorAccent。
  • colorcontrolNormal white 应该可以工作...你在测试什么 api?我测试了它,它可以工作
  • minSdkVersion 15, targetSdkVersion 21,电话是 23。我在问题中添加了我的主题。
【解决方案2】:

使用此文档。我认为此 URL 将有助于解决您的问题。

http://www.materialdoc.com/edit-text/

【讨论】:

  • 感谢路过,不幸的是,您的链接并没有真正谈论我的问题:/
  • 找不到链接 404
猜你喜欢
  • 2013-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-23
  • 2016-06-15
相关资源
最近更新 更多