Android 具有两种不同颜色的单个文本视图,用于动态文本
我有一个文本视图,我想把以@开头的单词的颜色改成红色,如果还有带#的单词,我想把它改成黑色。文本不是硬编码的。我怎么能做到这一点。请帮助我。我已经尝试了以下代码。但问题是红色只适用于第一个单词Android 具有两种不同颜色的单个文本视图,用于动态文本,android,textview,Android,Textview,我有一个文本视图,我想把以@开头的单词的颜色改成红色,如果还有带#的单词,我想把它改成黑色。文本不是硬编码的。我怎么能做到这一点。请帮助我。我已经尝试了以下代码。但问题是红色只适用于第一个单词 String MsgTitle = Details.get(position).getContent(); String refString; String hashString; if (MsgTitle.c
String MsgTitle = Details.get(position).getContent();
String refString;
String hashString;
if (MsgTitle.contains(" ")) {
refString = MsgTitle.substring(0,
MsgTitle.indexOf(' ')).trim();
if (String.valueOf(refString.charAt(0)).equals("@")) {
refString = refString.replaceFirst("(^@\\w+)",
"<font color='#8A0A0A'>$1</font>");
} else {
refString = refString.replaceAll("(#\\w+)",
"<font color='#000000'><b>$1</b></font>");
}
hashString = MsgTitle.substring(
MsgTitle.indexOf(' ') + 1).trim();
((TextView) vi.findViewById(R.id.textData))
.setText(Html.fromHtml(refString
+ " "
+ hashString
.replaceAll("(#\\w+)",
"<font color='#000000'><b>$1</b></font>")));
}
String MsgTitle=Details.get(position.getContent();
字符串引用字符串;
字符串哈希字符串;
if(MsgTitle.contains(“”){
refString=MsgTitle.substring(0,
MsgTitle.indexOf(“”)).trim();
if(String.valueOf(refString.charAt(0))等于(“@”){
refString=refString.replaceFirst((^@\\w+),
"$1");
}否则{
refString=refString.replaceAll((#\\w+),
"$1");
}
hashString=MsgTitle.substring(
MsgTitle.indexOf(“”)+1.trim();
((TextView)vi.findViewById(R.id.textData))
.setText(Html.fromHtml(refString
+ " "
+哈希字符串
.replaceAll((#\\w+),
"$1")));
}
回答我的问题
tring[]str\u array=str.split(“”);
布尔isExists=false;
for(int i=0;i
您可以通过格式化HTML中的字符串来实现这一点:
String text = "<font color=#ff0000>red text</font> <font color=#00ff00>green color</font>";
tv.setText(Html.fromHtml(text));
String text=“红色文本绿色”;
tv.setText(Html.fromHtml(text));
您将需要进行一些编码,以从已获得的@and#标记生成此HTML文本,但这应该不会太难
祝你好运:)
编辑:
这里有一些东西可以修复你的算法。它只适用于查找红色标签,但可以轻松扩展到其他颜色:
(顺便说一句,我没有测试它,所以可能会有一些小故障在这里和那里…希望你能解决它们tho:p)
String text=“lalala@red lalala”;
int indexForRed=text.indexOf(“@”);
int indexForSpace=-1;
字符串红色文本;
文本前的字符串;
文本后的字符串;
while(indexForRed!=-1)
{
indexForSpace=text.indexOf(“,indexForRed);
redText=text.substring(indexForRed+1,indexForSpace);
beforeRedText=indexForRed>0?text.substring(0,indexForRed-1):“”;
afterRedText=indexForSpace
也可以考虑使用另一个分母来代替另一个颜色(而不是γ……可能是$,%,^),这是因为你用来指定字体中的颜色,它可能会混淆整个算法。如果你必须使用#,那么在搜索@之前一定要先搜索#,它应该可以正常工作
希望这有帮助:)您可以通过格式化HTML中的字符串来实现这一点:
String text = "<font color=#ff0000>red text</font> <font color=#00ff00>green color</font>";
tv.setText(Html.fromHtml(text));
String text=“红色文本绿色”;
tv.setText(Html.fromHtml(text));
您将需要进行一些编码,以从已获得的@and#标记生成此HTML文本,但这应该不会太难
祝你好运:)
编辑:
这里有一些东西可以修复你的算法。它只适用于查找红色标签,但可以轻松扩展到其他颜色:
(顺便说一句,我没有测试它,所以可能会有一些小故障在这里和那里…希望你能解决它们tho:p)
String text=“lalala@red lalala”;
int indexForRed=text.indexOf(“@”);
int indexForSpace=-1;
字符串红色文本;
文本前的字符串;
文本后的字符串;
while(indexForRed!=-1)
{
indexForSpace=text.indexOf(“,indexForRed);
redText=text.substring(indexForRed+1,indexForSpace);
beforeRedText=indexForRed>0?text.substring(0,indexForRed-1):“”;
afterRedText=indexForSpace
也可以考虑使用另一个分母来代替另一个颜色(而不是γ……可能是$,%,^),这是因为你用来指定字体中的颜色,它可能会混淆整个算法。如果你必须使用#,那么在搜索@之前一定要先搜索#,它应该可以正常工作
希望这有帮助:)尝试HTML样式:String data = "<font color=##00FFFF>blue</font> <font color=#FFFF00>yellow</font>";
((TextView) vi.findViewById(R.id.textData))
.setText(Html.fromHtml(data));
String data=“蓝黄”;
((TextView)vi.findViewById(R.id.textData))
.setText(Html.fromHtml(数据));
希望这有帮助尝试HTML样式:
String data = "<font color=##00FFFF>blue</font> <font color=#FFFF00>yellow</font>";
((TextView) vi.findViewById(R.id.textData))
.setText(Html.fromHtml(data));
String data=“蓝黄”;
((文本视图)vi.findViewById(R.id.textDa
SpannableString text = new SpannableString("Lorem ipsum dolor sit amet");
// make "Lorem" (characters 0 to 5) red
text.setSpan(new ForegroundColorSpan(Color.RED), 0, 5, 0);
textView.setText(text, BufferType.SPANNABLE);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtHeader = (TextView) findViewById(R.id.txtHeader);
String str = "hello as new kkk @lll llll kkkk mm nn dd #jjj @pppp";
String[] str_array = str.split(" ");
for (int i = 0; i < str_array.length; i++) {
if (str_array[i].startsWith("@")) {
str=str.replaceAll(str_array[i], "<font color='red'>" + str_array[i] + "</font>");
} else if (str_array[i].startsWith("#")) {
str=str.replaceAll(str_array[i], "<font color='black'>" + str_array[i] + "</font>");
}
}
txtHeader.setText(Html.fromHtml(str));
}
String res1[] = {"#11111","#22222","#3333","#4444","#555","#666","#77","#88","#99","#100","#161","#152"};
String aa=(String) (res1[position]+","+res[position]+"---"+des[position]);
if (res1[position].startsWith("#")) {
aa=aa.replaceAll(res1[position], "<b>" + res1[position] + "</b>");
}