在EditText中的大写专用词

问题描述 投票:1回答:1

在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不工作。如何做到这一点?

java android android-studio android-edittext
1个回答
0
投票

如果你知道你的文本的值和文本的开始和结束索引。

editText.getText().toString().substring(startIndex, endIndex).toUpperCase();

你可以像这样找到文本的起始索引。

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

和结束索引是这样的:

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

0
投票

afterTextChanged(),做以下工作:

@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());
}
© www.soinside.com 2019 - 2024. All rights reserved.