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);
}
});
使用上面的代码,我试图从按钮中选择 BOLD 和 UNBOLD 文本。
例如: 我通过一次选择全部使这一行变为粗体。
现在,如果我通过选择上面一行中的一些文本来应用粗体,那么它将不起作用。
我已经完成了这些答案,但没有运气:
上述解决方案的问题在于,例如,如果您从文本中选择了五个单词并将它们设为粗体,而现在您选择了该粗体文本的一部分并取消了粗体,那么所有五个单词都将变为非粗体。
上述链接中提到的解决方案使用以下代码删除跨度,这不能正确解决问题
Spannable str = this.getText();
StyleSpan[] spans = str.getSpans(sStart, sEnd, StyleSpan.class);
for (int i = 0; i < spans.length; i++) {
if (spans[i].getStyle() == android.graphics.Typeface.BOLD){
str.removeSpan(spans[i]);
}
}
我找不到可以从选定范围中删除跨度的 Android API。任何帮助表示赞赏,谢谢。