Java EditText中特定于大写的单词

Java EditText中特定于大写的单词,java,android,android-edittext,Java,Android,Android Edittext,在EditText中,我想知道如何利用特定的单词。代码如下 editText.addTextChangedListener(new TextWatcher() { private static final String KEYWORD = "rain"; private static final String KEYWORD1 = "music"; @Override public void beforeTextChanged

在EditText中,我想知道如何利用特定的单词。代码如下

 editText.addTextChangedListener(new TextWatcher() {

        private static final String KEYWORD = "rain";
        private static final String KEYWORD1 = "music";

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            onSaveNote();
        }

        @Override
        public void afterTextChanged(Editable s) {
            onSaveNote();


            try {

                for (StyleSpan span : s.getSpans(0, s.length(), StyleSpan.class)) {
                    s.removeSpan(span);
                }

                // Add new spans for every occurrence of the keyword.
                int i = 0;
                while (i != -1) {
                    i = editText.getText().toString().indexOf(KEYWORD, i);
                    if (i != -1) {
                        s.setSpan(new InputFilter[]{new InputFilter.AllCaps()}, i, i + KEYWORD.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

                    }

                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
我试着找这个,但没有找到。InputFilter不工作。如何执行此操作?

后文本更改()
中,执行以下操作:

@Override
public void afterTextChanged(Editable s) {
    onSaveNote();
    String[] words = s.toString().split("\\s+");
    String output = "";
    for (String word : words) {
        if (word.equalsIgnoreCase(KEYWORD) || word.equalsIgnoreCase(KEYWORD1)) {
            output += word.toUpperCase(Locale.getDefault()) + " ";
        } else {
            output += word + " ";
        }
    }
    editText.setText(output.trim());
}
PostTextChanged()
中,执行以下操作:

@Override
public void afterTextChanged(Editable s) {
    onSaveNote();
    String[] words = s.toString().split("\\s+");
    String output = "";
    for (String word : words) {
        if (word.equalsIgnoreCase(KEYWORD) || word.equalsIgnoreCase(KEYWORD1)) {
            output += word.toUpperCase(Locale.getDefault()) + " ";
        } else {
            output += word + " ";
        }
    }
    editText.setText(output.trim());
}

若你们知道你们的文本的值和你们的文本的开始和结束索引

editText.getText().toString().substring(startIndex, endIndex).toUpperCase();
您可以在如下文本中找到起始索引:

editText.getText().toString().indexOf(KEYWORD)
editText.getText().toString().indexOf(KEYWORD) + KEYWORD.length()
结束索引如下:

editText.getText().toString().indexOf(KEYWORD)
editText.getText().toString().indexOf(KEYWORD) + KEYWORD.length()

若你们知道你们的文本的值和你们的文本的开始和结束索引

editText.getText().toString().substring(startIndex, endIndex).toUpperCase();
您可以在如下文本中找到起始索引:

editText.getText().toString().indexOf(KEYWORD)
editText.getText().toString().indexOf(KEYWORD) + KEYWORD.length()
结束索引如下:

editText.getText().toString().indexOf(KEYWORD)
editText.getText().toString().indexOf(KEYWORD) + KEYWORD.length()

请检查一下你的日志,告诉我是怎么回事。别忘了删除PostextChanged()W/AllCapsTransformationMethod中的旧代码:调用方未启用长度更改;不,不。我删除了它。textAllCaps在xml中是真的吗?不。我没有textAllCaps请检查您的日志并告诉我发生了什么。别忘了删除PostextChanged()W/AllCapsTransformationMethod中的旧代码:调用方未启用长度更改;不,不。我删除了它。textAllCaps在xml中是真的吗?不。我没有textAllCaps