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 中选定文本的粗体?
上述解决方案的问题在于,例如,如果您从文本中选择了五个单词并将它们设置为粗体,现在您选择了该粗体文本的某些部分并取消粗体,那么所有五个单词都将取消粗体。
上述链接中提到的解决方案使用以下代码来删除跨度,这不能正确解决问题
Spannable str = …Run Code Online (Sandbox Code Playgroud)