這是最近一個小需求,但始終沒有達到產(chǎn)品需求,修改Edittext任何事件在修改經(jīng)常會導致方法反復觸發(fā),如果判斷不到位經(jīng)常達不到效果。實驗過后網(wǎng)上效果都不理想,現(xiàn)在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