在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不工作。如何做到这一点?
如果你知道你的文本的值和文本的开始和结束索引。
editText.getText().toString().substring(startIndex, endIndex).toUpperCase();
你可以像这样找到文本的起始索引。
editText.getText().toString().indexOf(KEYWORD)
和结束索引是这样的:
editText.getText().toString().indexOf(KEYWORD) + KEYWORD.length()
在 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());
}