作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图从所选文本中删除粗体文本,但是当我点击按钮时,它取消了我之前加粗的所有文本。似乎 removeSpan.styleSpan[i] 没有处理我选择的文本的哪一部分,而是从整个粗体范围字符串中删除了粗体文本。
这是我在一个按钮下使用的代码
private void boldText(){
int selectionStartb = texto.getSelectionStart();
int selectionEndb = texto.getSelectionEnd();
if (selectionStartb > selectionEndb) {
int temp = selectionEndb;
selectionEndb = selectionStartb;
selectionStartb = temp;
}
if (selectionEndb > selectionStartb) {
Spannable str = texto.getText();
boolean BL = false;
StyleSpan[] styleSpans;
styleSpans = str.getSpans(selectionStartb, selectionEndb, StyleSpan.class);
// If the selected text-part already has BOLD style on it, then
// we need to disable it
for (int i = 0; i < styleSpans.length; i++) {
if (styleSpans[i].getStyle() == android.graphics.Typeface.BOLD) {
str.removeSpan(styleSpans[i]);
BL = true;
}
}
// Else we set BOLD style on it
if (!BL) {
str.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), selectionStartb, selectionEndb,
Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
}
texto.setSelection(selectionStartb, selectionEndb);
}
最佳答案
您正在使用此文本:
Spannable str = texto.getText();
并且您正在搜索选定范围内的跨度:
styleSpans = str.getSpans(selectionStartb, selectionEndb, StyleSpan.class);
了解这里发生的事情很重要。您没有在选择范围内获得所有“跨区文本”,甚至所有 StyleSpan
;您将获得应用于整个 文本的所有 StyleSpan
,只要它们至少有一部分应用于所选范围。
换句话说,即使您只选择了跨文本的一部分,StyleSpan
对象仍然代表整个跨文本。
您将不得不修改您的代码以处理所有不同的可能情况:
关于java - removeSpan(styleSpans[i]) 从带样式的文本中移除之前的样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53235308/
我正在做一个项目,我的 android 在这个项目中作为一个网络服务器工作;输入带端口号的 IP 地址,打开 Web 界面,用户可以将文件上传到手机。我想在 Web 界面上显示一些图片,以便我们的界面
我是一名优秀的程序员,十分优秀!