gpt4 book ai didi

android - 在android中结合多字符串和文本

转载 作者:行者123 更新时间:2023-11-29 14:55:00 24 4
gpt4 key购买 nike

我是 android、Java 和 sqlite 的新手。对于我的第一个程序,我正在创建一个程序,它将接受用户输入并将其放入预定义的文本中。

示例:“文本”string1“更多文本”string2“更多文本”等

我的文本将是一种颜色,而字符串将以另一种颜色显示。

我正在使用 sqlite 来分离我的数据和代码,这是我碰壁的地方。尝试寻求有关如何将上述文本合并到数据库表中的一行/一列的帮助。

仅使用上面的一个示例,我就可以启动并运行它。但是上面将有 50 多个发布示例,这使得数据库成为必须,尤其是当我想在发布后添加更多内容时。

最佳答案

您很可能已经阅读过 SpannableStringBuilder,它允许您为 TextView 内容中的文本添加颜色。查看下面的代码:

SpannableStringBuilder ssb = new SpannableStringBuilder(<your text>);
ForegroundColorSpan fcs = new ForegroundColorSpan(Color.rgb(255, 0, 0));

ssb.setSpan(fcs, 0, ssb.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(ssb);

上面的代码在大多数情况下都可以工作,但是您想要的是在单个 TextView 上使用不同的交替颜色。那么您应该执行以下操作:

String text = your_text + text_from_database;
SpannableStringBuilder ssb = new SpannableStringBuilder(text);
ForegroundColorSpan fcs = new ForegroundColorSpan(Color.rgb(255, 0, 0));
ForegroundColorSpan fcs2 = new ForegroundColorSpan(Color.rgb(0, 255 0));

ssb.setSpan(fcs, 0, your_text, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
ssb.setSpan(fcs2, your_text.length(), ssb.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(ssb);

上面的代码现在可以工作了,但是你会注意到如果你添加另一个文本 your_another_text 并且想要第二次使用之前的 fcs 实例,以前着色的 your_text 现在将失去其格式(颜色)。这次您需要创建另一个 ForegroundColorSpan fcs3 来格式化 SpannableStringBuilder 的第三部分。这里的关键是在 setSpan 方法中只使用一次字符样式。见下文:

String testTest = "abcdefgh";
String testTest2 = "ijklmnop";
String testTest3 = "qrstuvwxyz";

SpannableStringBuilder ssb = new SpannableStringBuilder(testTest+testTest2+testTest3);
ForegroundColorSpan fcs = new ForegroundColorSpan(Color.rgb(255, 0, 0));
ForegroundColorSpan fcs2 = new ForegroundColorSpan(Color.rgb(0, 255, 0));
ForegroundColorSpan fcs3 = new ForegroundColorSpan(Color.rgb(255, 0, 0));


ssb.setSpan(fcs, 0, testTest.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
ssb.setSpan(fcs2, testTest.length(), (testTest+testTest2).length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
ssb.setSpan(fcs3, (testTest+testTest2).length(), ssb.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);

test.setText(ssb);

如果您知道您的 SpannableStringBuilder 中有固定数量的字符串元素,则此方法非常有用。如果您希望拥有动态长度和元素数量的 TextView,则需要采用不同的方法来实现。对我有用的是将每个字符串元素转换为 SpannableString,使用 setSpan,然后将其append 到 TextView。如果您使用循环来构建 TextView,这将很有用。

TextView test = (TextView)findViewById(R.id.test);

String testTest = "abcdefgh";
String testTest2 = "ijklmnop";
String testTest3 = "qrstuvwxyz";

SpannableString ssb = new SpannableString(testTest);
ForegroundColorSpan fcs = new ForegroundColorSpan(Color.rgb(255, 0, 0));
ForegroundColorSpan fcs2 = new ForegroundColorSpan(Color.rgb(0, 255, 0));
ForegroundColorSpan fcs3 = new ForegroundColorSpan(Color.rgb(255, 0, 0));

ssb.setSpan(fcs, 0, ssb.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
test.setText(ssb);

SpannableString ssb2 = new SpannableString(testTest2);
ssb2.setSpan(fcs2, 0, ssb2.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
test.append(ssb2);

SpannableString ssb3 = new SpannableString(testTest3);
ssb3.setSpan(fcs3, 0, ssb3.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
test.append(ssb3);

关于android - 在android中结合多字符串和文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8696990/

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