gpt4 book ai didi

android - 如何在android中检索选定文本的BackgroundColorSpan

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:39:34 24 4
gpt4 key购买 nike

我正在尝试将 BackgroundColorSpan 设置为我的 Edit-text 中的选定文本。因此,当我选择任何文本并单击按钮时,它会将背景颜色设置为该特定文本,然后我将该注释保存到我的 SDCard 中,格式为 .html 然后我再次检索该注释以进行编辑再次以相同的格式。

我现在面临的问题是,当我将 BackgroundColorSpan 应用于所选文本时,它显示的是我应用的具有背景颜色的字符串,但是一旦我将该注释保存到我的 SDCard 并重新打开,它不显示该特定字符串的背景颜色,而是显示没有背景颜色的普通字符串。

下面是我用来将背景颜色设置为编辑文本选定区域的代码

mSpannable.setSpan(new BackgroundColorSpan(color),startSelection, endSelection, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

下面是将我的笔记保存到 SD 卡的代码。

            Spanned spannedText = edtNoteDescription.getText();
StringBuilder output = new StringBuilder();
AppHtml.withinHtml(output, spannedText);
File mFile = new File(Environment.getExternalStorageDirectory()
+ File.separator + "MyNote/");
}
File myFile = new File(mFile, "/" + strNoteTitle + ".html/");
myFile.createNewFile();
FileOutputStream fOut = new FileOutputStream(myFile);
OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);
myOutWriter.append(output);
myOutWriter.close();
fOut.close();

使用上面的代码,我可以成功地以 HTML 格式保存我的文件,但我没有得到具有背景颜色的字符串。

我尝试在 Log 中打印该字符串,然后将该字符串粘贴到 w3School 中,然后我得到了我期望的准确结果,但在 android 中我不知道为什么它不起作用。

我在 Logcat 中得到的字符串如下

<p><font color ="#7dff00">This</font> <font color ="#ff5100">Is</font>&#160; a&#160; <font color ="#04ff00"><b><font style = "background-color:#2929dd">String</font></b></font>... </p>

你可以试试这个字符串 here这为字符串提供了背景颜色的完美结果,但在设置为 android Edit-ext 时,我不知道发生了什么,而且它没有按照我预期的那样设置。

编辑

下面是我用来从我的 SD 卡文件中检索文本的代码

            Bundle bundle = getIntent().getExtras();
strGetPath = bundle.getString(GlobalClass.notesPath);
filePath = new File(strGetPath);
fileInputStream = new FileInputStream(filePath);
int size = fileInputStream.available();
bytbuffer = new byte[size];
fileInputStream.read(bytbuffer);
fileInputStream.close();
String strGetData = new String(bytbuffer);
Spanned spanHTMLData = AppHtml.fromHtml(strGetData);
LogM.e("===== Getting Data =====" + strGetData);
edtNoteDescription.setText(spanHTMLData);

最佳答案

我在创建一个保存 HTML 笔记的项目时遇到了同样的问题。

正如您所说,您已经制作了自定义的 HTML.java 类,我也为我的目的自定义了相同的类。

默认的 Html.java 类不包含背景颜色、字体大小、项目符号等功能

所以我在这里分享该类(class)的内容,这样您就可以从中得到为您的 HTML 注释设置背景颜色的想法。

让我们假设您自定义的 Html.java = AppHtml.java,以便其他人可以更好地理解它。

1) 首先在您的 AppHtml.java 类中添加背景色标签。将以下代码添加到您的 withinParagraph 方法。

if (style[j] instanceof BackgroundColorSpan) {
out.append("<font style = \"background-color:#");
String color = Integer
.toHexString(((BackgroundColorSpan) style[j])
.getBackgroundColor() + 0x01000000);
while (color.length() < 6) {
color = "0" + color;
}
out.append(color);
out.append("\">");
}

然后完成你已经开始的字体样式

if (style[j] instanceof BackgroundColorSpan) {
out.append("</font>");
}

2) 这是我的字体

private static class Font {
public String mColor;
public String mFace;
public String mbgColor;
public String mSize;

public Font(String color, String face, String bgColor, String size) {
mColor = color;
mFace = face;
mbgColor = bgColor;
mSize = size;
}
}

3)这是我的startFont方法。

private static void startFont(SpannableStringBuilder text,
Attributes attributes) {
String color = attributes.getValue("", "color");
String face = attributes.getValue("", "face");
String bgColor = attributes.getValue("", "style");
String size = attributes.getValue("", "size");

int len = text.length();
text.setSpan(new Font(color, face, bgColor, size), len, len,
Spannable.SPAN_MARK_MARK);
}

4)这是我的endFont方法。

private static void endFont(SpannableStringBuilder text) {
int len = text.length();
Object obj = getLast(text, Font.class);
int where = text.getSpanStart(obj);

text.removeSpan(obj);

if (where != len) {
Font f = (Font) obj;
if (f.mColor != null) {
if (!TextUtils.isEmpty(f.mColor)) {
if (f.mColor.startsWith("@")) {
Resources res = Resources.getSystem();
String name = f.mColor.substring(1);
int colorRes = res.getIdentifier(name, "color",
"android");
if (colorRes != 0) {
ColorStateList colors = res
.getColorStateList(colorRes);
text.setSpan(new TextAppearanceSpan(null, 0, 0,
colors, null), where, len,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
} else {
int c = getHtmlColor(f.mColor);
if (c != -1) {
text.setSpan(
new ForegroundColorSpan(c | 0xFF000000),
where, len,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
}
if (f.mFace != null) {
text.setSpan(new TypefaceSpan(f.mFace), where, len,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}

if (f.mbgColor != null) {
String bg_COLOR = f.mbgColor.substring(
f.mbgColor.lastIndexOf("#"), f.mbgColor.length());

if (!TextUtils.isEmpty(bg_COLOR)) {
if (bg_COLOR.startsWith("@")) {
Resources res = Resources.getSystem();
String name = bg_COLOR.substring(1);
int colorRes = res.getIdentifier(name, "color",
"android");
if (colorRes != 0) {
ColorStateList colors = res
.getColorStateList(colorRes);
text.setSpan(new TextAppearanceSpan(null, 0, 0,
colors, null), where, len,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
} else {
int c = getHtmlColor(bg_COLOR);
if (c != -1) {
text.setSpan(
new BackgroundColorSpan(c | 0xFF000000),
where, len,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
}

if (f.mSize != null) {

if (!TextUtils.isEmpty(f.mSize)) {

int size = Integer.parseInt(f.mSize);

text.setSpan((new AbsoluteSizeSpan(size)), where, len,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

}
}

}
}

关于android - 如何在android中检索选定文本的BackgroundColorSpan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25723828/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com