不幸的是,我无法为EditText工作进行ellipsize。当文字太长时,甚至可以在文本的末尾加上三个点?它适用于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"
答案 0 :(得分:16)
将此属性设置为edittext。 Ellipsize正在使用禁用编辑文本
android:lines="1"
android:scrollHorizontally="true"
android:ellipsize="end"
android:singleLine="true"
android:editable="false"
答案 1 :(得分:15)
您必须删除android:inputType
属性。
如果定义了inputType,则Ellipsize不起作用。
答案 2 :(得分:0)
在EditText中可能无法实现(除非您创建自己的视图)。我认为默认行为(对于singleLine EditText)是当文本不适合视图时可以侧向滚动文本。
答案 3 :(得分:0)
我不确定它是否回答了这个问题(而且我猜最初的提问者在 7 年半之后不再那么感兴趣了),但我非常有信心我的答案对任何绊倒省略号的人都会派上用场EditText 的问题。
不要试图在其中找到任何逻辑,但根据 Oleksandr 和 Mubarak 的回答,我得出以下结论:
要在 XML 中省略 EditText,请使用已弃用的 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);
答案 4 :(得分:-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);
}
}
}
}