不幸的是,我无法为 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"
设置此属性以编辑文本。 Elipsize 正在使用禁用编辑文本
android:lines="1"
android:scrollHorizontally="true"
android:ellipsize="end"
android:singleLine="true"
android:editable="false"
您必须删除
android:inputType
属性。
如果定义了 inputType,Ellipsize 将不起作用。
我不确定它是否回答了问题(我猜最初的提问者在七年半之后不再那么感兴趣了),但我非常有信心我的答案对于任何遇到省略号问题的人都会派上用场编辑文本。
不要试图在其中寻找任何逻辑,但根据 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);
在 EditText 中可能不可能(除非您创建自己的视图)。我认为默认行为(对于 singleLine EditText)是当文本不适合视图时,您可以向侧面滚动文本。
EditText是TextView的子类,你可以重写edittext方法,使其像textview一样工作 我尝试了这个并且有效
class CustomTextInputEditTextView: TextInputEditText {
constructor(context: Context, attributeSet: AttributeSet?): super(context, attributeSet) {
}
override fun getDefaultEditable(): Boolean {
return false
}
override fun getDefaultMovementMethod(): MovementMethod? {
return null
}
}
<com.CustomTextInputEditTextView
android:cursorVisible="false"
android:ellipsize="end"
android:lines="1"
android:inputType="none" />
另一种方法是使用包含相同文本的可省略的、不透明的 TextView 覆盖 EditText 视图。当您点击 TextView 时,它会隐藏 TextView 叠加层并将单击事件传递给 EditText。完成后,使用新文本刷新 TextView 并使其再次可见(并省略)。
您需要编写一个扩展
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);
}
}
}
}