删除EditText中的其他下划线

时间:2017-12-15 11:36:56

标签: android android-layout android-edittext

我有自定义背景drawable的EditText:

enter image description here

EditText代码:

System.nanoTime

我正在使用android数据绑定库和MVVM架构。

如果ViewModel将isAllowEdit设置为true,则将EditText背景设置为@ drawable / profile_et_background_active。

如果isAllowEdit为false,则EditText的背景设置为@ drawable / profile_et_background。

此外,我通过将inputType设置为TYPE_NULL来禁止编辑,并通过将inputType设置为TYPE_CLASS_TEXT来允许编辑。

@ drawable / profile_et_background_active code:

<EditText
    android:id="@+id/etName"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@{ViewModel.isAllowEdit  ? @drawable/profile_et_background_active : @drawable/profile_et_background}"
    android:inputType="@{ViewModel.isAllowEdit ? InputType.TYPE_CLASS_TEXT : InputType.TYPE_NULL}"
    android:text="@={ViewModel.name}"
    android:textColor="@color/main_dark_text_color" />

@ drawable / profile_et_background代码:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item>
        <shape android:shape="rectangle">
            <solid android:color="@android:color/transparent" />
        </shape>
    </item>

    <item
        android:left="-2dp"
        android:right="-2dp"
        android:top="-2dp">
        <shape>
            <solid android:color="@android:color/transparent" />
            <stroke
                android:width="1dp"
                android:color="@color/main_elements_line_color" />
        </shape>
    </item>

</layer-list>

当允许编辑并且用户开始在EditText中键入文本时,在键入的单词下会出现另外的下划线(它只属于当前键入的单词,EditText文本的所有其他部分都没有下划线):

enter image description here

我尝试通过向EditText添加颜色过滤器来删除该下划线:

<item>
    <shape android:shape="rectangle">
        <solid android:color="@android:color/transparent" />
    </shape>
</item>

但它不起作用。

如何删除额外的下划线?

更新1

我已经尝试添加@android:color / transparent,我收到错误:

“java.lang.Integer无法强制转换为android.graphics.drawable.Drawable”

更改“@ {ViewModel.isAllowEdit?@ drawable / profile_et_background_active:@ drawable / profile_et_background}”

to“@ {ViewModel.isAllowEdit?@ drawable / profile_et_background_active:@android:color / transparent}”

更新2

添加InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS对我不起作用。所以我想这不是拼写检查器的问题。

7 个答案:

答案 0 :(得分:3)

下划线文本样式由BaseInputConnection的{​​{1}}应用到主题属性EditText所应用的样式,该文本当前正在“组成”中,默认情况下设置为字符串android:candidatesTextStyleSpans

字符串的文本部分被忽略,但是样式跨度是从字符串中提取的,并应用于“撰写”文本,即用户当前正在键入的单词。表示可以选择建议或自动更正处于活动状态。

您可以通过将theme属性设置为带样式或无样式的字符串来更改样式(例如,使用粗体或斜体代替下划线),或完全删除样式:

<u>candidates</u>

注意事项:删除所有样式将使BaseInputConnection实现在每次文本更改时重新评估主题属性,因为跨度信息是延迟加载的,并且仅当该属性设置为样式字符串时才持久存在。您也可以设置<!-- remove styling from composing text--> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- ... --> <item name="android:candidatesTextStyleSpans">candidates</item> </style> <!-- apply bold + italic styling to composing text--> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- ... --> <item name="android:candidatesTextStyleSpans"><b><i>candidates</i></b></item> </style> 支持的任何其他样式,例如Html:fromHtml(...)为默认文字颜色,这在显示上没有区别。

答案 1 :(得分:2)

您可以将EditText设置为具有自定义透明可绘制或仅使用

 android:background="@android:color/transparent".

答案 2 :(得分:1)

根据我的理解。在editText中使用它

android:background="@android:color/transparent"

如果您想停止键入的拼写检查文本,请使用

android:inputType="textNoSuggestions"

答案 3 :(得分:1)

在xml中使用inputType textNoSuggestions

  <EditText
    android:id="@+id/text"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:inputType="text|textNoSuggestions"/>
  

InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS 是使用代码的等效标志

答案 4 :(得分:1)

我已经看到了上面给出的所有有效答案。但在最后一次尝试你可以这样:

 mEditText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        mEditText.clearComposingText();
                    }
                },200);


            }
        });

ClearComposingText方法将对您有所帮助。希望这会有所帮助。

答案 5 :(得分:1)

这肯定会帮助你。只需更改主题样式即可。

<style name="Theme.MyApp" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="textInputStyle">@style/Widget.MyApp.TextInputLayout</item>
</style>

<style name="Widget.MyApp.TextInputLayout" parent="Widget.MaterialComponents.TextInputLayout.FilledBox">
    <item name="boxStrokeWidth">0dp</item>
    <item name="boxStrokeWidthFocused">0dp</item>
</style>

答案 6 :(得分:0)

使用 android:inputType = "textVisiblePassword" 去除文本下多余的下划线

并使用 android:background="@android:color/transparent" 删除 EditText 的底部下划线