12

不幸的是,我无法为 EditText 作品制作椭圆。当文本太长时,甚至可以在文本末尾放置三个点?它适用于 TextiView,但不适用于 EditText。有什么想法?

 android:id="@+id/ed_email_personalInfo"
 android:layout_width="match_parent"
 android:layout_height="55dp"
 android:background="@color/transparent"
 android:ellipsize="end"
 android:ems="10"
 android:hint="@string/email"
 android:inputType="textEmailAddress"
 android:maxLength="64"
 android:paddingLeft="10dp"
 android:paddingRight="10dp"
 android:singleLine="true"
 android:textColorHint="@color/col9a9a9a"
 android:textSize="15.7sp"
4

5 回答 5

22

您必须删除android:inputType属性。

如果定义了 inputType,Ellipsize 将不起作用。

于 2015-08-18T12:13:40.153 回答
21

设置此属性以编辑文本。Elipsize 正在使用禁用编辑文本

    android:lines="1"
    android:scrollHorizontally="true"
    android:ellipsize="end"
    android:singleLine="true"
    android:editable="false"
于 2013-12-31T12:13:51.870 回答
2

在 EditText 中可能无法实现(除非您创建自己的视图)。我认为默认行为(对于 singleLine EditText)是当文本不适合视图时,您可以横向滚动文本。

于 2013-10-10T03:34:52.977 回答
2

我不确定它是否回答了这个问题(我猜最初的提问者在 7 年半之后不再那么感兴趣了),但我非常有信心我的答案会对任何遇到 EditText 省略号问题的人派上用场.

不要试图在其中找到任何逻辑,但根据 Oleksandr 和 Mubarak 的回答,我想出了以下几点:

要在 XML 中省略 EditText,请使用 deprecated android:editable="false"。就我而言:

android:editable="false"
android:focusable="false"
android:singleLine="true"
android:maxLines="1"
android:ellipsize="end"

暂时不用纠结android:inputType="none"。EditText 看起来就像一个 TextView 并且被适当地椭圆化。

可以像这样使 EditText 可编辑(并删除省略号):

editText.setFocusable(true);
editText.setFocusableInTouchMode(true);
editText.setActivated(true);
editText.setInputType(InputType.TYPE_TEXT_FLAG_CAP_WORDS); // or whatever fits your needs
editText.setSingleLine(true);
editText.setEllipsize(null);
editText.requestFocus();

然后,您可以将 EditText 恢复到其原始状态(即伪装成 TextView 并适当椭圆化),如下所示:

editText.setFocusable(false);
editText.setFocusableInTouchMode(false);
editText.setActivated(false);
editText.setSingleLine(true);
editText.setKeyListener(null); // this is the key
editText.setEllipsize(TextUtils.TruncateAt.END);
于 2021-04-30T09:01:41.727 回答
-3

您需要编写一个扩展的新类EditText。例如:

MyEditTextEllipsize extends EditText{

private String dotsString;

private String storeString;

public MyEditTextEllipsize(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

@Override
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
        super.onFocusChanged(focused, direction, previouslyFocusedRect);

         if(focused)

     {
       setText(storeString);
      }else {
             String NOW = getText().toString();
                storeString = NOW;
            if (NOW != null && getWidth() <= getTextSize() * NOW.length()) {

                    dotsString = NOW.substring(0, (int) (getWidth() / getTextSize())) + "...";

                    setText(dotsString);

                }
}

    }
}
于 2014-12-01T03:46:55.877 回答