屏蔽复制粘贴
editText.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
});
屏蔽点击时显示的小水滴
屏蔽如下图所示的小水滴
editText.setTextSelectHandle(new ColorDrawable());
屏蔽双击双中
editText.setMovementMethod(new BaseMovementMethod() {
@Override
public void initialize(TextView widget, Spannable text) {
// 参考 ArrowKeyMovementMethod#initialize,如果不设置的话,会导致length=0时,不显示cursor
Selection.setSelection(text, 0);
}
});
动态更新光标颜色
可利用DrawableWrapper实现
DrawableWrapper cursorDrawableWrapper = new DrawableWrapper(null) {};
editText.setTextCursorDrawable(cursorDrawableWrapper);
// 这里换成要更换的Drawable
cursorDrawableWrapper.setDrawable(new ColorDrawable(Color.RED));
cursorDrawableWrapper.setDrawable(new ColorDrawable(Color.GREEN));
将显示文字显示为*
editText.setTransformationMethod(new AsteriskPasswordTransformationMethod());
AsteriskPasswordTransformationMethod实现如下:
public static class AsteriskPasswordTransformationMethod extends PasswordTransformationMethod {
@Override
public CharSequence getTransformation(CharSequence source, View view) {
return new PasswordCharSequence(source);
}
}
private static class PasswordCharSequence implements CharSequence {
private final CharSequence origin;
public PasswordCharSequence(CharSequence charSequence) {
origin = charSequence;
}
@Override
public int length() {
return origin.length();
}
@Override
public char charAt(int index) {
return '*';
}
@NonNull
@Override
public CharSequence subSequence(int start, int end) {
return origin.subSequence(start, end);
}
}
设置了MovementMethod之后不显示光标
需要在initialize方法中手动调用下Selection#setSelection方法
editText.setMovementMethod(new BaseMovementMethod() {
@Override
public void initialize(TextView widget, Spannable text) {
// 参考 ArrowKeyMovementMethod#initialize,如果不设置的话,会导致length=0时,不显示cursor
Selection.setSelection(text, 0);
}
});