* Created by Rex on 2019/1/3.
*/
public class AutoRightEditText extends EditText {
public boolean isFirstOnClick = true;
private boolean isShowEnd;
public AutoRightEditText(Context context) {
super(context);
initView();
}
public AutoRightEditText(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
public AutoRightEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView();
}
private void initView() {
setClickable(true);
/**
* 如果你本身使用的该方法记得 !hasFocus--->isFirstOnClick = true
*/
setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
isFirstOnClick = true;
}
}
});
}
@Override
protected void dispatchSetPressed(boolean pressed) {
super.dispatchSetPressed(pressed);
if (isFirstOnClick && isPressed()) {
isShowEnd = true;
int len = getText().length();
setSelection(len);
} else {
isShowEnd = false;
isFirstOnClick = false;
}
}
@Override
protected void onSelectionChanged(int selStart, int selEnd) {
super.onSelectionChanged(selStart, selEnd);
if (isShowEnd && selStart == selEnd) {
setSelection(getText().length());
}
}
}
---------------------
作者:Rex叶然
原文:https://blog.csdn.net/qq_28844947/article/details/85791687
补充:
适用范围可用于如一个列表。有多个填写数字及小数的情况下。EditText光标无法移动情况。
赠送工具类:
package com.yc.stscf.utils; import android.text.Editable; import android.text.InputFilter; import android.text.TextWatcher; import android.widget.EditText; /** * ================================================ * * @author :Vip * @version :V 1.0.0 * @date :2019/8/13 18:49 * 描 述: EditText 限制输入整数和小数 的位数 默认 整数位无限制,小数位 最多2位 * 修订历史: * ================================================ */ public class DecimalInputTextWatcherUtils implements TextWatcher { /** * 默认小数的位数2 位 **/ private static final int DEFAULT_DECIMAL_DIGITS = 2; private EditText editText; /** * 小数的位数 **/ private int decimalDigits; /** * 整数的位数 **/ private int integerDigits; public DecimalInputTextWatcherUtils(EditText editText) { this.editText = editText; this.decimalDigits = DEFAULT_DECIMAL_DIGITS; } public DecimalInputTextWatcherUtils(EditText editText, int decimalDigits) { this.editText = editText; if (decimalDigits <= 0) { throw new RuntimeException("decimalDigits must > 0"); } this.decimalDigits = decimalDigits; } public DecimalInputTextWatcherUtils(EditText editText, int integerDigits, int decimalDigits) { this.editText = editText; if (integerDigits <= 0) { throw new RuntimeException("integerDigits must > 0"); } if (decimalDigits <= 0) { throw new RuntimeException("decimalDigits must > 0"); } this.decimalDigits = decimalDigits; this.integerDigits = integerDigits; } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable editable) { String s = editable.toString(); editText.removeTextChangedListener(this); if (s.contains(".")) { if (integerDigits > 0) { editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(integerDigits + decimalDigits )}); } if (s.length() - 1 - s.indexOf(".") > decimalDigits) { s = s.substring(0, s.indexOf(".") + decimalDigits + 1); //不输入超出位数的数字 editable.replace(0, editable.length(), s.trim()); } } else { if (integerDigits > 0) { editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(integerDigits )}); if (s.length() > integerDigits) { s = s.substring(0, integerDigits); editable.replace(0, editable.length(), s.trim()); } } } //小数点开头,小数点前补0 if (".".equals(s.trim())) { s = "0" + s; editable.replace(0, editable.length(), s.trim()); } //多个0开头,只输入一个0 if (s.startsWith("0") && s.trim().length() > 1) { if (!".".equals(s.substring(1, 2))) { editable.replace(0, editable.length(), "0"); } } editText.addTextChangedListener(this); } }