这是最近一个小需求,但始终没有达到产品需求,修改Edittext任何事件在修改经常会导致方法反复触发,如果判断不到位经常达不到效果。实验过后网上效果都不理想,现在po出最后的完美方案。
* 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