您的位置:首页 > 移动开发 > Android开发

Android开发笔记(六)可变字符串

2015-11-24 17:05 441 查看

Andorid的文本显示

在android的TextView控件上显示文本使用setText函数,包括继承自TextView的其他控件如Button、CheckBox、EditText、RadioButton等等,setText之后,我们还可以使用setTextColor设置文本的颜色,使用setTextSize设置文本的大小,使用setTextAlignment设置文本的对齐方式,还可以使用setTextAppearance设置文本的各个属性(包括颜色、大小、风格)。但是这样只能对控件上的所有文本做统一设置,如果我们想对前一段文本加大加粗,对中间一段文本显示红色,再对后面一段文本加超链接,那就要另外想办法了。幸好android为我们提供了可变字符串SpannableString,允许对文本分段显示。

SpannableString应用

SpannableString允许对其中一段字串分别设置不同的风格,各种风格的源码在android源码包里的android.text.style居然有三十几个,看来是没法全部掌握了。那还是挑几个常用的来练练手,针对上面说的三段文本分别显示来分别处理。

  首先创建一个可变字符串

String itemText = "Hello world. "
SpannableString spanText = new SpannableString("Hello world. ");


  第一段文本改变文字大小采用RelativeSizeSpan,加粗采用StyleSpan,代码如下:

spanText.setSpan(new RelativeSizeSpan(1.5f) , 0, first_length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spanText.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, first_length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);


上面setSpan第一个参数代表设置的风格对象,第二个参数代表该段文本的起始位置,第三个参数代表该段文本的结束位置,第四个参数用来标识在 Span 范围内的文本前后输入新的字符时是否把它们也应用这个效果(主要对EditText有用)。分别有SPAN_EXCLUSIVE_EXCLUSIVE(前后都不包括)、SPAN_INCLUSIVE_EXCLUSIVE(前面包括,后面不包括)、SPAN_EXCLUSIVE_INCLUSIVE(前面不包括,后面包括)、SPAN_INCLUSIVE_INCLUSIVE(前后都包括)。

  第二段文本改变文字大小也采用RelativeSizeSpan,改变颜色采用ForegroundColorSpan,代码如下:

spanText.setSpan(new RelativeSizeSpan(0.75f), first_length+1, second_length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spanText.setSpan(new ForegroundColorSpan(Color.RED), first_length+1, second_length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);


  第三段代码加超链接稍微复杂些,因为要显示超链的下划线,并且在点击时还要跳转到指定的url地址,这里我们要继承URLSpan重写一个类

private static class MyURLSpan extends URLSpan {
public MyURLSpan(String url) {
super(url);
}

@Override
public void onClick(View widget) {
System.out.println("MyURLSpan onClick");
String url = "http://blog.csdn.net/aqi00";
wv_go.loadUrl(url);
wv_go.requestFocus();
wv_go.setWebViewClient(new WebViewClient());
return;
}
}

String str_url = "Let's go.";
Spannable sp = (Spannable) Html.fromHtml("<a href=\"\">"+str_url+"</a>");
CharSequence text = sp.toString();
URLSpan[] urls = sp.getSpans(0, text.length(), URLSpan.class);
for (URLSpan url : urls) {
MyURLSpan myURLSpan = new MyURLSpan(url.getURL());
spanText.setSpan(myURLSpan, second_length+1, itemText.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}


最后往控件中填入该可变字符串

tv_hello.setText(spanText);


显示效果截图如下



点击这里下载本文可变字符串的例子代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: