从 editText 中仅检测和更改 "hello" 文本字体系列

Detect and change only "hello" text font-family from editText

我有一个 editText 框,当用户写 "hello" 我只想更改 "hello" 字体系列更改为斜体,但其他文本字体系列保持不变仅更改 "hello"

String detectText, text;
    detectText = "hello";
    text = title.getText().toString();
    detectText.

你能帮帮我吗?

正如有人所说,您需要一个文本观察器才能在文本更改时进行更改。您还需要 span 才能设置部分文本的样式。这是一种方法:

editText.addTextChangedListener(new TextWatcher() {
    private static final String KEYWORD = "hello";

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

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

    @Override
    public void afterTextChanged(Editable s) {
        // Remove previous spans.
        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 = text.toString().indexOf(KEYWORD, i);
            if (i != -1) {
                s.setSpan(new StyleSpan(Typeface.ITALIC), i, i + KEYWORD.length(),
                        Spannable.SPAN_INCLUSIVE_INCLUSIVE);
                i += KEYWORD.length();
            }
        }
    }
});

文本观察器在编辑的不同时间调用三种方法,但只有在 afterTextChanged 中更改文本才是安全的。在那里,所有以前的样式范围都被删除,然后扫描文本以添加新的。

请注意,如果您打算将其变成更复杂的东西(例如语法荧光笔),性能可能会成为问题。现在,每当用户更改单个字符时,所有跨度都会重新添加。