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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaoyantan/article/details/70314829
  • 去掉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;
}

猜你喜欢

转载自blog.csdn.net/xiaoyantan/article/details/70314829