edittext 设置显示长度(像素),字符长度 添加省略号

时间:2022-05-04 08:55:36

1.需要的工具类

 
public class StringUtil {            /**     * 获取字符串的长度,中文占一个字符,英文数字占半个字符     *      * @param value     *            指定的字符串     * @return 字符串的长度     */    public static int length(String value) {        double valueLength = 0;        String chinese = "[\u4e00-\u9fa5]";        // 获取字段值的长度,如果含中文字符,则每个中文字符长度为2,否则为1        for (int i = 0; i < value.length(); i++) {            // 获取一个字符            String temp = value.substring(i, i + 1);            // 判断是否为中文字符            if (temp.matches(chinese)) {                // 中文字符长度为1                valueLength += 1;            } else {                // 其他字符长度为0.5                valueLength += 0.5;            }        }        // 进位取整        return (int) (Math.ceil(valueLength) * 2);    }    //输入框文字超长时间,转换字符内容    public static String get12Sub(String value) {        StringBuilder sb = new StringBuilder();        for (int i = 0; i < value.length(); i++) {            // 获取一个字符            String temp = value.substring(i, i + 1);            sb.append(temp);            Paint paint = new Paint();               Rect rect = new Rect();             paint.getTextBounds(sb.toString(), 0, sb.toString().length(), rect);            if (rect.width() >= 118) {                sb.append("…");                Log.i("aaa", sb.toString());                return sb.toString();            }        }        return value;    }}

2.自定义EditText,实现addTextChangedListener 和 onFocusChange方法

    public MyEditorText(Context context, AttributeSet attrs) {
super(context, attrs);

this.addTextChangedListener(new TextWatcher() {

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (StringUtil.length(MyEditorText.this.getText().toString()) >= 24) {
int length = MyEditorText.this.getText().toString().length();
InputFilter[] filters = {new InputFilter.LengthFilter(length)};
MyEditorText.this.setFilters(filters);
} else {
InputFilter[] filters = {new InputFilter.LengthFilter(24)};
MyEditorText.this.setFilters(filters);
}
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}

@Override
public void afterTextChanged(Editable s) {

}
});
        this.setOnFocusChangeListener(new OnFocusChangeListener() {            @Override            public void onFocusChange(View v, boolean hasFocus) {                if (!hasFocus) {                    String value = MyNormalEditorText.this.getText().toString();                    textValue = value;                    String show = StringUtil.get12Sub(value);                    Log.i("aaa", "show......" + show);                    MyNormalEditorText.this.setText(show);                } else {                    try {                        MyNormalEditorText.this.setText(textValue);                        MyNormalEditorText.this.setSelection(textValue.length());                    } catch (Exception e) {                        Log.i("aaa", "输入框光标有误 :" + e.toString());                    }                }            }        });    }    }
欢迎转载,但请标注原创地址!