总结TextView,EditText使用的点点滴滴

来源:互联网 发布:qq飞车黄金守护神数据 编辑:程序博客网 时间:2024/06/05 19:11
  • 去掉EditText的下划线
android:background="@null"
  • 设置EditText的光标(可以自定义)
android:cursorVisible="true"android:textCursorDrawable="@drawable/test_cursor"

shape文件:

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="rectangle">    <size android:width="3dp" />    <span style="font-family: Arial, Helvetica, sans-serif;"><!-- 光标宽度可以自己定义 --></span>    <solid android:color="@color/common_bg" /><!-- 光标颜色可以自己定义 --></shape>
  • 设置EditText最小显示的行数,光标显示在顶部第一行
android:gravity="top"android:minLines="4"
  • 设置TextView的行间距和行间距倍数
  android:lineSpacingExtra="4dp" android:lineSpacingMultiplier="1.3"
  • 設置TextView最多显示多少个字符,多余用省略号表示
<item name="android:ellipsize">end</item><item name="android:maxEms">12</item><item name="android:maxLines">1</item>
  • 自定义属性时设置TextView的textSize通过getPaint()方法设置(这样sp转换为px时才正常)
tvText.getPaint().setTextSize(customTextSize);
  • 在代码中设置EditText的最大字数
etEditCommon.setFilters(new InputFilter[]{new InputFilter.LengthFilter(len)});
  • 设置EditText数字输入范围,如[0,100]
 etPoints.setFilters(new InputFilter[]{new ValueRangeInputFilter(0, 100)});

ValueRangeInputFilter的代码如下:

public class ValueRangeInputFilter implements InputFilter{    private static final String TAG = "ValueRangeInputFilter";    private final int mMin, mMax;    public ValueRangeInputFilter(int min, int max) {        this.mMin = min;        this.mMax = max;    }    @Override    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {        try{            String originalResult = originalResultOfInputFilter(source.toString(), start, end,                    dest.toString(), dstart, dend);            int input = Integer.parseInt(originalResult);            if (isInRange(input))                return null;        }catch (NumberFormatException e){            LLog.d(TAG, "numberFormatException, and e is: " + e);        }        return "";    }    public static String originalResultOfInputFilter(String source, int start, int end,                                                     String dest, int dStart, int dEnd){        if (dStart == dest.length()) return dest + source;        if (dStart == 0) return source + dest;        String firstString = dest.substring(0, dStart);        String endString = dest.substring(dEnd);        return firstString + source + endString;    }    private boolean isInRange(int value){        return mMin <= value && value <= mMax;    }}
  • 监听EditText输入结合ButterKnife可以写成这样(方法名自己决定):
 @OnTextChanged(value = R.id.et_text, callback = OnTextChanged.Callback.AFTER_TEXT_CHANGED)    public void onTextContentChanged() {    //写入你的处理    }
  • 最后一个简单的工具类
public class TextUtils {/** * 一般用于登录注册之类的验证码显示 * @param textView * @return */public static CountDownTimer verifyCodeBtnCountDown(TextView textView) {    return new CountDownTimer(60000, 1000) {        @Override        public void onTick(long millisUntilFinished) {            textView.setEnabled(false);            textView.setText(millisUntilFinished / 1000 + "秒后重发");        }        @Override        public void onFinish() {            textView.setEnabled(true);            textView.setText(textView.getContext().getString(R.string.reverification));        }    };}/** * 如果所给content为空,则设置给定TextView为Gone,否则设置文本并且可见 * @param textView * @param content */public static void showTextOrGone(TextView textView, @Nullable String content){    if (TextUtils.isEmpty(content)){        textView.setVisibility(View.GONE);    }else{        textView.setVisibility(View.VISIBLE);        textView.setText(content);    }}/** * 与上面类似 * @param textView * @param content */public static void showTextOrInVisible(TextView textView, @Nullable String content){    if (TextUtils.isEmpty(content)){        textView.setVisibility(View.INVISIBLE);    }else{        textView.setVisibility(View.VISIBLE);        textView.setText(content);    }}/** * 判断给定的可变数组对象是否为空,对于多次判断,可减少很多代码 * 对象可为TextView(EditText),字符串,List集合等 * @param objs * @return */public static boolean isEmpty(Object... objs) {    boolean isEmpty = false;    for (Object obj : objs) {        if (obj instanceof String) {            if (TextUtils.isEmpty((String) obj)) {                isEmpty = true;            }        } else if (obj instanceof TextView) {            if (((TextView) obj).length() > 0) {                isEmpty = true;            }        } else if (obj instanceof List) {            if (((List) obj).isEmpty()) {                isEmpty = true;            }        }    }    return isEmpty;}/** * 根据给定的字符串数组返回一个拼接的字符串,多个字符串以逗号隔开 * @param strs * @return */public static String listToString(List<String> strs) {    if (strs != null && strs.size() > 0) {        String str = "";        for (int i = 0; i < strs.size(); i++) {            if (i != 0) {                str += "," + strs.get(i);            } else {                str += strs.get(i);            }        }        return str;    }    return "";}/** * 清空给定的可变TextView数组内容 * @param tvs */public static void clearText(TextView... tvs){    for (TextView tv : tvs) {        tv.setText("");    }}/** * 判断所给的TextView是否达到给定的最小长度 * @param minLength * @param tvs * @return */public static boolean isLengthEnough(int minLength,TextView... tvs){    for (TextView tv : tvs) {        if(tv.length() < minLength) {            return false;        }    }    return true;}
0 0
原创粉丝点击