【问题标题】:How to remove the underline from the EditText field in Android?如何从 Android 中的 EditText 字段中删除下划线?
【发布时间】:2011-07-27 03:23:36
【问题描述】:

每当在 EditText 框中键入一个单词时,我总是会在正在键入的单词下方看到一个下划线。但是当我在那个词后面按一个空格时,我不再看到下划线。

我的要求是在用户键入消息时删除该下划线。

添加了屏幕截图,我们看到 Smith 带有下划线。但我不希望这种情况发生。

下面是我用于警报对话框的 xml。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<TextView 
    android:id="@+id/name_view"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_marginLeft="20dip"
    android:layout_marginRight="20dip"
    android:text="@string/alert_dialog_name"
    android:gravity="left"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<EditText
    android:id="@+id/username_edit"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:layout_marginLeft="20dip"
    android:layout_marginRight="20dip"
    android:scrollHorizontally="true"
    android:autoText="false"
    android:inputType="textPersonName"
    android:capitalize="none"
    android:gravity="fill_horizontal"
    android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>

【问题讨论】:

  • 当前输入的字词的外观(至少在启用自动完成的情况下)因设备而异。例如,在 Android 2.2 上的 HTC SenseUI 上,正在考虑自动完成的当前单词以绿色突出显示。你为什么要搞乱用户期望在他们习惯的特定设备/键盘上看到的内容?
  • 我只想使用用户键入的任何内容并将其发送到服务器,我不希望编写任何逻辑来删除最后一个带下划线的单词。
  • 这是特定于 IME 的。如果您希望 IME 尽可能少地干扰,您可以使用不同的 inputType,但在这种情况下,您使用的是正确的类型,它会执行它认为最适合这种特定类型输入的操作,并且这也是用户所期望的。
  • 您不必使用任何逻辑来删除下划线——当您想使用该值时,只需调用 getText().toString() 即可。它不会包含特殊格式或任何内容。
  • 好的,我把它作为答案添加了,所以你可以接受它,虽然我并不认为这是一个很大的问题或解决方案——它只是“忽略它的样子并对待它就像任何普通的文本输入一样。”

标签: android android-edittext


【解决方案1】:

android:inputType="textNoSuggestions"

【讨论】:

  • 是否仍有建议,但要避免当前单词的下划线?
  • 我假设为此,您可能需要覆盖跨度行为。我认为这些下划线来自 SuggestionSpan。这只是一个想法,我没有尝试过:) 1. 在 Editable 上,使用实现 SpanWatcher 的新自定义跨度调用 setSpan。将其从零设置为长度。 2. 在 SpanWatcher 覆盖 onSpanAdded 以检查 SuggestionSpan 类型。 3. 删除任何 SuggestionSpan 并将其替换为您自己的类,该类从它扩展并使用相同的建议和标志进行初始化。 4.覆盖updateDrawState以设置不同的颜色(或透明的)。
  • 不幸的是,我找不到其他方法来控制 SuggestionSpan 的建议颜色。但可能还有其他一些我不知道的方式。
【解决方案2】:

有一个功能可以删除任何组成状态。我认为如果您在每次用户键入后调用它,您将看不到下划线。我在用户完成输入后使用它来获取整个 textView 的绘图缓存(我需要没有下划线)。这是

someTextView.clearComposingText();

【讨论】:

  • 谢谢,它可以工作,但在TextWatcher.afterTextChanged 中很难使用,因为EditText 在输入过程中会闪烁,并且在完成编辑后再次添加下划线。在类型期间使用超时,请参阅stackoverflow.com/a/47842636/2914140
【解决方案3】:

接受的答案没有给出解决方案,其他一些用户给出了答案,但没有人给出完整的答案,所以这就是我在这里写工作解决方案的原因。

如果要删除下划线,只需添加以下代码。

XML

android:inputType="textNoSuggestions"

Java

EditText ed;
ed = findViewById(yourId);
ed.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

如果你想设置多个输入类型,那么,

ed.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

可能以上信息对其他人有帮助。

【讨论】:

    【解决方案4】:

    您不必使用任何逻辑来删除下划线——当您想使用该值时,只需调用 getText().toString() 即可。它不会包含特殊格式或任何内容。

    【讨论】:

    • 但对于用户来说,这似乎是不需要的东西。
    【解决方案5】:

    最好的解决方案是添加您的EditText:

     android:inputType="textMultiLine|textVisiblePassword"
    

    【讨论】:

    • 您好,欢迎来到 Stack Overflow,感谢您的回答。很好的答案还包括解释原始问题的问题以及为什么这个答案解决了这个问题。
    【解决方案6】:

    如果 EditText 视图是动态的(从类文件创建),请在您的类中使用它:

    EditText.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
    

    或在 XML 中将 android:inputType="textNoSuggestions" 包含在您的 EditText 中。

    【讨论】:

      【解决方案7】:

      如果您想保留表情符号并且textNoSuggestions 不适合您,请阅读此内容。

      textNoSuggestions 并非在每个键盘上都有效。 inputType="textVisiblePassword" 有效,但它会从大多数键盘上删除表情符号。

      我发现设置 inputType="textUri" 可以正常工作并保留添加表情符号的功能。

      【讨论】:

        【解决方案8】:

        尝试:

        android:inputType= InputTypes.TextVariationVisiblePassword;
        

        【讨论】:

          【解决方案9】:

          您可以将 EditText 设置为具有自定义透明可绘制对象或仅使用 android:background="@android:color/transparent"。

          【讨论】:

            【解决方案10】:
            <EditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@null"
                    android:imeOptions="actionDone"
                    android:inputType="textNoSuggestions"
                    android:maxLines="1"
                    />
            

            【讨论】:

            • 你给出的 inputType 没问题,但还需要使用或符号 (|) 给出 textNoSuggestions 然后下划线才会消失。
            • 它将删除行下的Edittext,而不是写下划线
            猜你喜欢
            • 1970-01-01
            • 2012-10-12
            • 2017-03-12
            • 1970-01-01
            • 1970-01-01
            • 2012-02-07
            • 1970-01-01
            • 2016-10-15
            • 2020-10-03
            相关资源
            最近更新 更多