出于安全考虑,我正在使用setText
的char array版本,以避免使用String
版本。
public final void setText (char[] text,
int start,
int len)
BindingAdapter:] >>
public class DataBindingAdapter {
@BindingAdapter("android:text")
public static void bindArrayInText(ClearableEditText view, char[] value) {
if(value == null) return;
Log.v("BindingAdapter", String.valueOf(value));
view.setText(value, 0, value.length);
}
@InverseBindingAdapter(attribute = "android:text")
public static char[] getArrayFromText(ClearableEditText view) {
int length = view.getText().length();
char[] password = new char[length];
view.getText().getChars(0, length, password, 0);
Log.v("BindingAdapter", String.valueOf(password));
return password;
}
}
仿真器行为:
] >>
但是问题是,当我在EditText
中输入ABCD时,我显示了[[DCBA
,并且焦点始终停留在
EditText
的开头。
实际设备行为:
] >>仅显示第一个字符。日志:
]2020-02-04 17:37:43.760 4110-4110 / com.bla V / InputMethodManager:开始输入:tba = com.blaic=com.android.internal.widget.EditableInputConnection@3e6e221mNaviBarColor -16750956 mIsGetNaviBarColorSuccess true,NavVisible:true,NavTrans:false 2020-02-04 17:37:43.760 4110-4110 / com.blaD / InputMethodManager:startInputInner-ID:0 2020-02-04 17:37:43.7674110-4110 / com.bla I / InputMethodManager:startInputInner-mService.startInputOrWindowGainedFocus
出于安全考虑,我使用setText的char数组版本来避免使用String版本。 public final void setText(char [] text,int start,int len)...
@BindingAdapter("android:text")
public static void setCharArray(EditText view, char[] value) {
if(value == null) return;
int length = view.length();
char[] password = new char[length];
view.getText().getChars(0, length, password, 0);
if (Arrays.equals(value, password)) {
Log.v("BindingAdapter out" + view.getId(), String.valueOf(value));
view.setText(value, 0, value.length);
}
}
@BindingAdapter("android:text")
public static void setCharArray(EditText view, char[] value) {
if(value == null) return;
int length = view.length();
char[] password = new char[length];
view.getText().getChars(0, length, password, 0);
if (Arrays.equals(value, password)) {
Log.v("BindingAdapter out" + view.getId(), String.valueOf(value));
view.setText(value, 0, value.length);
}
}