小编Sum*_*ule的帖子

在 StyleSpan 中,为什么 Typeface to NORMAL 不能应用于 Typeface to BOLD?

Button btnBold = (Button) findViewById(R.id.btnBold);
    btnBold.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick (View v){
        startSelection = etx.getSelectionStart();
        endSelection = etx.getSelectionEnd();


        Spannable s = etx.getText();
        s.setSpan(new StyleSpan(Typeface.BOLD), startSelection, endSelection, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
    }
});


Button btnNormal = (Button) findViewById(R.id.btnNormal);
    btnNormal.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick (View v){
        startSelection = etx.getSelectionStart();
        endSelection = etx.getSelectionEnd();
        Spannable s = etx.getText();
        s.setSpan(new StyleSpan(Typeface.NORMAL), startSelection, endSelection, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
    }
});
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,我尝试对按钮中选定的文本进行加粗和取消加粗。

例如: 我通过一次选择所有内容将这一行加粗。

现在,如果我通过选择上行中的一些文本来应用取消粗体,那么它将不起作用。

我已经浏览过这些答案,但没有运气:

如何取消 Android Edittext 中选定文本的粗体?

删除跨度上的样式

从 edittext 中选定的文本中删除样式

上述解决方案的问题在于,例如,如果您从文本中选择了五个单词并将它们设置为粗体,现在您选择了该粗体文本的某些部分并取消粗体,那么所有五个单词都将取消粗体。

上述链接中提到的解决方案使用以下代码来删除跨度,这不能正确解决问题

Spannable str = …
Run Code Online (Sandbox Code Playgroud)

android spanned android-edittext spannablestring spannable

5
推荐指数
0
解决办法
536
查看次数