Android中TextView的富文本显示
有时候我们需要在Android的TextView中简单显示一些更多的功能,比如超链接啊,小图片啊什么的,查了下资料,简单写个小Demo做个备份
以下是部分代码,第一部分是在Activity中,
private void setTextView1() {
String text = "TextView显示html文本:粗体"
+ "百度链接"
+ "红色";
textView.setText(Html.fromHtml(text));
// 支持网页超链接点击
textView.setMovementMethod(LinkMovementMethod.getInstance());
}
private void setTextView2() {
String text = "电话: 020-5555555 "
+ "网站:http://www.weibo.com "
+ "微博提到某用户: @红茶36 "
+ "微博讨论的主题 : #Android面试宝典# #java宝典# 邮箱:956***473@qq.com";
textView2.setText(text);
// 识别超链接:电话,网页
// Linkify:它会使用正则表达匹配相应的超链接,如果匹配成功,就会识别为超链接
// 点击超链接后,会执行: startActivity(new Intent(Intent.ACTION_VIEW, uri))
// 电话uri: tel://xx
// 网页uri: http://xx
Linkify.addLinks(textView2, Linkify.PHONE_NUMBERS | Linkify.WEB_URLS);
// 添加自定义超链接
LinkifyUtil.addCustomLinks(textView2);
}
private void setTextView3() {
String text = "高兴[高兴]--TextView实现图文混排功能";
// SpannableString ss = new SpannableString(text);
// ImageSpan span = new ImageSpan(this, R.drawable.ic_launcher);
// ss.setSpan(span, 2, 6, 0);
// textView3.setText(ss);
SpannableString ss = new SpannableString(text);
Bitmap bitmap = createFixSizeBitmap(this, R.drawable.ic_launcher, dp2px(20));
ImageSpan span = new ImageSpan(this, bitmap, ImageSpan.ALIGN_BOTTOM);
ss.setSpan(span, 2, 6, 0);
textView3.setText(ss);
}
private int dp2px(float dp) {
return (int) (getResources().getDisplayMetrics().density * dp + 0.5f);
}
/**
* 创建指定大小的Bitmap对象
* @param textViewActivity
* @param icLauncher
* @param imageWidth 要生成的bitmap对象的宽度(高度)
* @return
*/
private Bitmap createFixSizeBitmap(Context context, int imageResId, int imageWidth) {
// 原始图片
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), imageResId);
int rawWidth = bitmap.getWidth(); // 原始图片的宽度
int rawHeight = bitmap.getHeight();// 原始图片的高度
float scaleW = (float)imageWidth / rawWidth;
float scaleH = (float)imageWidth / rawHeight;
Matrix matrix = new Matrix();
matrix.postScale(scaleW, scaleH);
return Bitmap.createBitmap(bitmap, 0, 0, rawWidth, rawHeight, matrix, true); // 传false图片会失真
}
*******************
下面传一下 部分LinkifyUtil 的代码
/**
* 识别主题超链接: #xxx#
* @param textView
*/
public static void addTopicLinks(TextView textView) {
// 匹配形如 #xxx# 的正则表达式
// \u4E00-\u9FA5所有的中文字符
Pattern p = Pattern.compile("#([A-Za-z0-9\u4E00-\u9FA5]+)#");
String scheme = "weibo://topic?uid=";
// 匹配的过滤器
MatchFilter matchFilter = null;
// 用来处理返回的结果
TransformFilter transformFilter = new TransformFilter() {
@Override
public String transformUrl(Matcher match, String url) {
String str = match.group(0);
String str2 = match.group(1);
System.out.println("----------str : " + str + " str2 : " + str2);
return str2;
}
};
Linkify.addLinks(textView, p, scheme, matchFilter, transformFilter);
}
/**
* 识别用户超链接: @xxx
* @param textView
*/
public static void addUserLink(TextView textView) {
// 匹配形如 @xxx 的正则表达式
// \u4E00-\u9FA5所有的中文字符
Pattern p = Pattern.compile("\\@([A-Za-z0-9\u4E00-\u9FA5]+)\\.?");
String scheme = "weibo://user?uid=";
// 匹配的过滤器
MatchFilter matchFilter = new MatchFilter() {
@Override // 是否接受匹配的结果,返回true表示接受匹配,则会显示成超链接
public boolean acceptMatch(CharSequence s, int start, int end) {
// 获取匹配到的字符串
String bean = s.subSequence(start, end).toString();
System.out.println("------------bean: " + bean);
if (bean.endsWith(".")) { // 邮箱
return false;
} else {
return true;
}
}
};
// 用来处理返回的结果
TransformFilter transformFilter = new TransformFilter() {
@Override
public String transformUrl(Matcher match, String url) {
String str = match.group(0);
String str2 = match.group(1);
System.out.println("----------str : " + str + " str2 : " + str2);
return str2;
}
};
Linkify.addLinks(textView, p, scheme, matchFilter, transformFilter);
}
****************
运行如下图:
更多相关文章
- android中相机支持功能查看
- xUtils 源码解析
- android webview js交互, 响应webview中的图片点击事件
- android 加载自定义图片并在图片上绘图
- Android到底那个Acitivity启动(二)
- Android(安卓)搜索结果关键字动态匹配筛选变色效果且高亮显示
- Android(安卓)超强图片工具类BitmapUtil
- 实例讲解Android中ContentProvider组件的使用方法
- Android高仿微信相册选择器 多图片选择器、拍照