TextWatcher 或 InputFilter - 获取正在添加的文本并对其进行转换

问题描述

所以,我有一个我不知道如何解决的情况。我需要实现一个 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...