在Textiew中可以通过设置TextView的属性

代码语言:javascript代码运行次数:0运行复制android:maxEms和

代码语言:javascript代码运行次数:0运行复制android:ellipseize来使过多的文字显示为省略号,但在在EditText中设置只这两个属性则不行,

android默认只有在文字不可编辑的状态下才可以显示这些效果,但是EditText重写了这个属性,使得文字默认都是可以编辑的。

所以若想要呈现TextView的效果,必须加上以下属性

代码语言:javascript代码运行次数:0运行复制android:editable= "false"另外EditText不支持跑马等的效果.咱们来看看android源码

代码语言:javascript代码运行次数:0运行复制override

public void setEllipsize(TextUtils.TruncateAt ellipsis) {

if (ellipsis == TextUtils.TruncateAt.MARQUEE) {

throw new IllegalArgumentException("EditText cannot use the ellipsize mode TextUtils.TruncateAt.MARQUEE");

}

super.setEllipsize(ellipsis);

}如果设置跑马灯效果,会直接抛出异常

那么有同学会说了,editable设为false, 那岂不是没法进行文本编辑了?

这里呢, 建议大家自定义EditText并重写onTouchEvent方法,从外部进行控制是否获取焦点, 如下:

代码语言:javascript代码运行次数:0运行复制class FocusEditText(context: Context, attrs: AttributeSet) : EditText(context, attrs){

override fun onTouchEvent(event: MotionEvent?): Boolean {

return isEnabled && super.onTouchEvent(event)

}

}