问题描述
所以,我有一个我不知道如何解决的情况。我需要实现一个 TextWatcher 或 InputFilter,它允许我存储用户输入的内容,但在 editText 上显示相同长度的随机字符串。
现在我通过对 EditText 使用 PasswordTransformationMethod 来实现这一点,但是现在我必须以随机字符串为基础的字符/字符串可以是符号或表情符号,并且这些字符/字符串由多个字符组成,因此 PasswordTransformationMethod 获胜不行。
到目前为止我最好的尝试是这个,但我找不到一种方法来检测正在从 editText 添加或删除的内容。
@Override
protected void afterTextChange(Editable s) {
Print.log(TAG,"///****** After text changed: " + s.toString());
Print.log(TAG,"///****** UN ENCRYPTED after: " + unEncryptedString);
mBinding.etMessage.removeTextChangedListener(this);
mBinding.etMessage.setFilters(new InputFilter[]{});
//calculate prev text
String textToAdd = "";
if (encryptedString.length() > 0) {
Print.log(TAG,"///**********We have something,and in the textview... " + mBinding.etMessage.getText().toString());
String whatIsNow = mBinding.etMessage.getText().toString();
if (whatIsNow.length() > encryptedString.length()) {
Print.log(TAG,"///******** User typed something");
} else if (whatIsNow.length() < encryptedString.length()) {
Print.log(TAG,"///******** User removed something");
} else {
Print.log(TAG,"///********* Pretty sure the user typed something from auto-text");
}
} else {
Print.log(TAG,"///**********nothing saved as encrypted,so add everything: " + s.toString());
textToAdd = s.toString();
}
Print.log(TAG,"///******* TEXT TO ADD: " + textToAdd);
String randomString = "";
String encryptStringAux = new SharedPrefUtil(requireContext()).getString(PREFERENCE_ENCRYPTION_STYLE_CUSTOM_STRING_KEY,PREFERENCE_ENCRYPTION_STYLE_CUSTOM_STRING_DEFAULT);
int legthToAdd = mBinding.etMessage.getText().length() - encryptedString.length();
Print.log(TAG,"///******** Length to add: " + legthToAdd);
if (legthToAdd < 0) {
if (Math.abs(legthToAdd) < encryptedString.length()) {
randomString = encryptedString.substring(0,encryptedString.length() - Math.abs(legthToAdd));
}
encryptedString = randomString;
} else {
for (int i = 0; i < legthToAdd; i++) {
if (!encryptStringAux.equals(PREFERENCE_ENCRYPTION_STYLE_CUSTOM_STRING_DEFAULT)) {
String[] splitString = encryptStringAux.split("@");
int random = new Random().nextInt(splitString.length);
randomString = randomString + splitString[random];
} else {
randomString = randomString + " ";
}
}
encryptedString = encryptedString + randomString;
}
Print.log(TAG,"///********** Random String: " + encryptedString);
mBinding.etMessage.setText(encryptedString);
mBinding.etMessage.setSelection(mBinding.etMessage.getText().length());
mBinding.etMessage.setFilters(inputFilter);
mBinding.etMessage.addTextChangedListener(this);
}
我也尝试过类似结果的 InputFilter。 谁能给我任何提示以找到解决方案? 非常感谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)