我正在创建一个 Twitter 应用程序,并且一直在努力寻找一种有效的方式来格式化推文。
推文示例:“RT @BlahBlah 这是一条推文http://link.com #Hello”
我想格式化这个字符串的某些部分。例如,超链接是蓝色的,主题标签是灰色的,@xxxs 是绿色的
我该怎么做?
我正在创建一个 Twitter 应用程序,并且一直在努力寻找一种有效的方式来格式化推文。
推文示例:“RT @BlahBlah 这是一条推文http://link.com #Hello”
我想格式化这个字符串的某些部分。例如,超链接是蓝色的,主题标签是灰色的,@xxxs 是绿色的
我该怎么做?
Spannable 将完成这项工作:http: //developer.android.com/reference/android/text/Spannable.html
事实上,您可以使用 HTML 标签格式化 TextView 内的文本。我看了一下优秀的这个线程,我想它应该回答你的问题:TextView 中是否可以有多种样式?
这可行,但我认为它效率不高,因为它必须遍历整个字符串。我需要为很多推文做这件事......有没有更好,更有效的方法?
int atStart = 0;
int atEnd = 0;
boolean atFound = false;
String regex = "\\W";
System.out.println(str.length());
for(int i = 0;i < str.length();i++)
{
String a = Character.toString(str.charAt(i));
if(a.matches(regex)| i==str.length()-1 && atFound)
{
System.out.println(i + "REGEX MATCH");
if(i== str.length()-1)
{
atEnd = i+1;
}else
atEnd = i;
i--; // <- decrement. otherwise "@hello@hello" won't change
atFound = false;
str.setSpan(new BackgroundColorSpan(0xFFFF0000), atStart,
atEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}else
if(a.equals("@"))
{
atStart = i;
atFound = true;
}
}