- 浏览: 303540 次
- 性别:
- 来自: 广州
最新评论
-
qipa2015:
hao
Android中自定义SeekBar的背景颜色,进度条颜色,以及滑块的图片 -
chungehenyy:
Android中的JSON详细总结 -
wangys198:
请教下怎么加入一个jar包
说说APK反编译(代码插入)的那点事 -
andy199:
Android的TextView使用Html来处理图片显示、字体样式、超链接等 -
tyjxf:
加载图片是个烦人的事,我也正在困扰中
Android实现ListView异步加载图片
转载:http://my.oschina.net/javagg/blog/27834
一、[Android实例]实现TextView里的文字有不同颜色
转eoe:http://www.eoeandroid.com/thread-4496-1-1.html
import android.text.Html;
TextView t3 = (TextView) findViewById(R.id.text3);
t3.setText(
Html.fromHtml(
"<b>text3:</b> Text with a " +
"<a href=\"http://www.google.com\">link</a> " +
"created in the Java source code using HTML."));
二、TextView显示html文件中的图片
转javaeye:http://da-en.javaeye.com/blog/712415
我们知道要让TextView解析和显示Html代码。可以使用
Spanned text = Html.fromHtml(source);
tv.setText(text);
来实现,这个用起来简单方便。
但是,怎样让TextView也显示Html中<image>节点的图像呢?
我们可以看到fromHtml还有另一个重构:
fromHtml(String source, Html.ImageGetter imageGetter, Html.TagHandler tagHandler)
实现一下ImageGetter就可以让图片显示了:
ImageGetter imgGetter = new Html.ImageGetter() {
@Override
public Drawable getDrawable(String source) {
Drawable drawable = null;
drawable = Drawable.createFromPath(source); // Or fetch it from the URL
// Important
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable
.getIntrinsicHeight());
return drawable;
}
};
至于TagHandler,我们这里不需要使用,可以直接传null。
参考文档:
http://tech-droid.blogspot.com/2010/06/textview-with-html-content.html英语好的朋友就直接看英文文档吧。
三、Android---文字中插入表情
转载自:http://blog.163.com/spf9190@126/blog/static/50207531201091545954587/
这段时间在做一个短信项目,需要实现短信中插入表情的功能,本一位非常困难,经过一段时间的研究,发现还是比较簡単的,现在总结如下。
以短信输入框为例,短信的输入框是一个EditText,它的append方法不仅可以加入字符串,还可以添加HTML标记。以下就是使用HTML标记添加表情的具体操作。
首先需要构建一个ImageGetter,作用是通过HTML标记获得对应在res目录下的图片:
ImageGetter imageGetter = new ImageGetter() {
@Override
public Drawable getDrawable(String source) {
int id = Integer.parseInt(source);
//根据id从资源文件中获取图片对象
Drawable d = getResources().getDrawable(id);
d.setBounds(0, 0, d.getIntrinsicWidth(),d.getIntrinsicHeight());
return d;
}
};
然后就可以直接往EditText视图中添加
inputLable.append(Html.fromHtml("<img src='"+clickedImageId+"'/>", imageGetter, null));
其中 Html.fromHtml("<img src='"+clickedImageId+"'/>"就是HTML的图片标记,在Android中支持了部分HTML标记的使用(这方面我还在继续研究),HTML标记必须被Html.fromHtml修饰。imageGetter即为之前创建的ImageGetter类型的对象。
很简单的几句代码就解决了问题,不仅在EditText中,在TextView中同样可以这样插入图片。
效果图:
以下代码摘录至android源码里面的MMS项目,其中的
001 |
package com.android.mms.ui 里的 MessageListItem.java
|
002 |
package com.android.mms.util 里的 SmileyParser.java
|
003 |
/*** |
004 |
*
|
005 |
* 此方法描述的是: 注意此方法在做表情转换的准备了
|
006 |
* @author:wujun@cqghong.com,ppwuyi@sohu.com
|
007 |
* @version: 2010-5-13 下午03:31:13
|
008 |
*/
|
009 |
private void bindCommonMessage( final MessageItem msgItem) {
|
010 |
if (mDownloadButton != null ) {
|
011 |
mDownloadButton.setVisibility(View.GONE);
|
012 |
mDownloadingLabel.setVisibility(View.GONE);
|
013 |
}
|
014 |
// Since the message text should be concatenated with the sender's
|
015 |
// address(or name), I have to display it here instead of
|
016 |
// displaying it by the Presenter.
|
017 |
mBodyTextView.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
|
018 |
// Get and/or lazily set the formatted message from/on the
|
019 |
// MessageItem. Because the MessageItem instances come from a
|
020 |
// cache (currently of size ~50), the hit rate on avoiding the
|
021 |
// expensive formatMessage() call is very high.
|
022 |
CharSequence formattedMessage = msgItem.getCachedFormattedMessage();
|
023 |
if (formattedMessage == null ) { //肯定为null应为msgItem.formattedMessage从诞生来就没被注意过一次
|
024 |
formattedMessage = formatMessage(msgItem.mContact, msgItem.mBody, //重点到了
|
025 |
msgItem.mSubject, msgItem.mTimestamp,
|
026 |
msgItem.mHighlight);
|
027 |
msgItem.setCachedFormattedMessage(formattedMessage);
|
028 |
}
|
029 |
mBodyTextView.setText(formattedMessage);
|
030 |
if (msgItem.isSms()) {
|
031 |
hideMmsViewIfNeeded();
|
032 |
} else {
|
033 |
Presenter presenter = PresenterFactory.getPresenter(
|
034 |
"MmsThumbnailPresenter" , mContext,
|
035 |
this , msgItem.mSlideshow);
|
036 |
presenter.present();
|
037 |
if (msgItem.mAttachmentType != WorkingMessage.TEXT) {
|
038 |
inflateMmsView();
|
039 |
mMmsView.setVisibility(View.VISIBLE);
|
040 |
setOnClickListener(msgItem);
|
041 |
drawPlaybackButton(msgItem);
|
042 |
} else {
|
043 |
hideMmsViewIfNeeded();
|
044 |
}
|
045 |
}
|
046 |
drawLeftStatusIndicator(msgItem.mBoxId);
|
047 |
drawRightStatusIndicator(msgItem);
|
048 |
}
|
049 |
//------------------------------------------------------------------------------ |
050 |
/*** |
051 |
*
|
052 |
* 此方法描述的是: 开始转换了哦
|
053 |
* @author:wujun@cqghong.com,ppwuyi@sohu.com
|
054 |
* @version: 2010-5-13 下午03:32:52
|
055 |
*/
|
056 |
private CharSequence formatMessage(String contact, String body, String subject,
|
057 |
String timestamp, String highlight) {
|
058 |
CharSequence template = mContext.getResources().getText(R.string.name_colon); //遇到鬼了 <主题:<xliff:g id="SUBJECT">%s</xliff:g>>"
|
059 |
SpannableStringBuilder buf = //把他当作StringBuffer只是它可以放的不是 String 而已他能放跟多类型的东西
|
060 |
new SpannableStringBuilder(TextUtils.replace(template,
|
061 |
new String[] { "%s" },
|
062 |
new CharSequence[] { contact })); //替换成联系人
|
063 |
boolean hasSubject = !TextUtils.isEmpty(subject); //主题
|
064 |
if (hasSubject) {
|
065 |
buf.append(mContext.getResources().getString(R.string.inline_subject, subject)); //buff先在是 联系人 主题 XXXX eg wuyi <主题:dsadasdsa> 我爱我家
|
066 |
}
|
067 |
if (!TextUtils.isEmpty(body)) {
|
068 |
if (hasSubject) {
|
069 |
buf.append( " - " ); //如果内容有主题有就+ " - " eg wuyi <主题:sdsadsadsa> -
|
070 |
}
|
071 |
SmileyParser parser = SmileyParser.getInstance(); //获得表情类了哦
|
072 |
buf.append(parser.addSmileySpans(body)); //追查 急切关注中
|
073 |
}
|
074 |
if (!TextUtils.isEmpty(timestamp)) {
|
075 |
buf.append( "\n" );
|
076 |
int startOffset = buf.length();
|
077 |
// put a one pixel high spacer line between the message and the time stamp as requested
|
078 |
// by the spec.
|
079 |
//把之间的信息和时间戳的要求间隔一个像素的高线
|
080 |
//由规范
|
081 |
buf.append( "\n" );
|
082 |
buf.setSpan( new AbsoluteSizeSpan( 3 ), startOffset, buf.length(),
|
083 |
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
|
084 |
startOffset = buf.length();
|
085 |
buf.append(timestamp);
|
086 |
buf.setSpan( new AbsoluteSizeSpan( 12 ), startOffset, buf.length(),
|
087 |
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
|
088 |
// Make the timestamp text not as dark 改变某区域颜色 时间的地方为特殊颜色
|
089 |
int color = mContext.getResources().getColor(R.color.timestamp_color);
|
090 |
buf.setSpan( new ForegroundColorSpan(color), startOffset, buf.length(),
|
091 |
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
|
092 |
}
|
093 |
if (highlight != null ) {
|
094 |
int highlightLen = highlight.length();
|
095 |
String s = buf.toString().toLowerCase();
|
096 |
int prev = 0 ;
|
097 |
while ( true ) {
|
098 |
int index = s.indexOf(highlight, prev);
|
099 |
if (index == - 1 ) {
|
100 |
break ;
|
101 |
}
|
102 |
buf.setSpan( new StyleSpan(Typeface.BOLD), index, index + highlightLen, 0 );
|
103 |
prev = index + highlightLen;
|
104 |
}
|
105 |
}
|
106 |
return buf;
|
107 |
}
|
108 |
//------------------------------------------------------------ |
109 |
/** |
110 |
* Adds ImageSpans to a CharSequence that replace textual emoticons such
|
111 |
* as :-) with a graphical version.
|
112 |
*
|
113 |
* @param text A CharSequence possibly containing emoticons
|
114 |
* @return A CharSequence annotated with ImageSpans covering any
|
115 |
* recognized emoticons.
|
116 |
* 添加ImageSpans一个CharSequence的表情符号代替文字等 *如用图形版本:-)。
|
117 |
* 核心是把表情字符替换成ImageSpans的对象
|
118 |
*/
|
119 |
public CharSequence addSmileySpans(CharSequence text) {
|
120 |
SpannableStringBuilder builder = new SpannableStringBuilder(text);
|
121 |
Matcher matcher = mPattern.matcher(text);
|
122 |
while (matcher.find()) {
|
123 |
int resId = mSmileyToRes.get(matcher.group());
|
124 |
//注意下面的一块有点不好理解哦但是是核心
|
125 |
builder.setSpan( new ImageSpan(mContext, resId), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
|
126 |
}
|
127 |
return builder;
|
128 |
}
|
总结:
android 在将字符转化为表情图像其核心代码为
builder.setSpan(new ImageSpan(mContext, resId), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
原理过程是先匹配到表情字符然后通过new ImageSpan(上下文,表情地址)绘制出一个ImageView然后替换掉表情字符。
Android TextView 支持的HTML标签
-
<a href="...">
-
<b>
-
<big>
-
<blockquote>
-
<br>
-
<cite>
-
<dfn>
-
<div align="...">
-
<em>
-
<font size="..." color="..." face="...">
-
<h1>
-
<h2>
-
<h3>
-
<h4>
-
<h5>
-
<h6>
-
<i>
-
<img src="...">
-
<p>
-
<small>
-
<strike>
-
<strong>
-
<sub>
-
<sup>
-
<tt>
-
<u>
评论
发表评论
-
Android 学习资料大集合
2012-02-22 11:23 2551<script type="t ... -
总结了近百个Android优秀开源项目,覆盖Android开发的每个
2012-02-21 11:21 1958Android开发又将带来新一轮热潮,很多开发者都投入到这 ... -
说说APK反编译(代码插入)的那点事
2012-02-21 09:54 9071很多人热衷于逆向工程,其过程中既可以学习作者的思路,又可以锻炼 ... -
(转)一种新的MAT使用方法分析内存溢出问题
2012-02-21 09:42 1988相信很多人都用过MAT来分析内存溢出,而且网上有很多的使用方法 ... -
(转)Android* 应用性能调试
2012-02-08 09:33 1508概述 创造愉快用户体验的关键是开发响应快捷的应用。借助And ... -
Android SDK 中Android.net.wi
2012-02-06 15:20 1852这里列了很多,但是大致可以分为四个主要的类ScanResult ... -
android 从assets和res中读取文件(转)
2012-02-03 15:02 25381. 相关文件夹介绍 ... -
textview 超链接去掉下划线和设置超链接颜色
2011-12-06 17:15 3788/** * 点击超链接时打开其他博主资料页面 * ... -
按钮Listview等点击效果
2011-11-12 22:58 4013想设置listview中每行在点击、选中等不同状态下有不同的背 ... -
android 获取视频和图片的缩略图
2011-11-12 01:53 118181 在显示视频图片列表时,发送彩信时,制作幻灯片时都需要显示视 ... -
调用android系统图标
2011-10-31 16:54 2842Android系统中自带了很多图标,我们的程序可以方便使用。 ... -
The content of the adapter has changed but ListView did not receive a notificati
2011-10-27 15:43 1164在Android开发过程中,使用了大量的ListView,发现 ... -
android的上下文菜单---context menu
2011-09-23 09:53 1262android的菜单有三种: ... -
选择系统图片方法时返回图片真实路径
2011-09-21 10:36 1618protected void onActivityResul ... -
android一些技巧
2011-09-01 18:08 1503EditText ed = ... -
android TextView中超链接的事件捕捉(textview上LINK的点击事件)
2011-08-19 18:43 2524package com.cm; import java. ... -
Android 设置EditText显示或隐藏密码
2011-08-17 16:37 2231设置EditText显示或隐藏密码. 在CheckBox的o ... -
android调用系统资源裁剪图片
2011-08-08 12:52 28431 import java.io.File; 2 import ... -
Android 复制 粘贴
2011-07-25 10:18 2525Android 复制 粘贴 ClipboardManager ... -
三款Json查看小工具
2011-07-07 10:55 2694JSON(JavaScript Object Nota ...
相关推荐
TextView超链接自定义样式,包含自定义字体颜色和去掉超链接下划线
指定了textView的字体,颜色,行距,样式,独立样式,内部超链接,和图片共存的方法。
Android TextView使用HTML处理字体样式、显示图片、超链接项目源码
TextView中的超链接可以通过几种方式实现:1.Html.fromHtml,2.Spannable,3.Linkify.addLinks。下面分别进行测试,包括修改字体样式,下划线样式,点击事件等,需要的朋友可以参考下
Android SpannableString设置超链接、颜色、字体等属性 在Android中,TextView是我们最常用的用来显示文本的控件。 一般情况下,TextView中的文本都是一个样式。那么如何对于TextView中各个部分的文本来设置字体...
在Android中,TextView是我们最常用的用来显示文本的控件。一般情况下,TextView中的文本都是一个样式。那么如何对于TextView中各个部分的文本来设置字体,大小,颜色,样式,以及超级链接等属性呢?下面我们通过...
特征 超链接点击事件(带有按下的文本和背景颜色) 单击事件(带有按下的文本和背景颜色) 文字背景色 文字前景色 字体大小 文本样式(粗体、斜体) 文字字体 图像当然,您可以使用 api addTypeSpan添加自定义字体...
android:typeface设置文本字体,必须是以下常量值之一:normal 0, sans 1, serif 2, monospace(等宽字体) 3] android:height设置文本区域的高度,支持度量单位:px(像素)/dp/sp/in/mm(毫米) android:...
这个项目可以快速的帮你构建Textview中的内容,如字体颜色,字体背景,样式,删除线,下滑线,文本超链接,文本跳转电话,文本跳转短信,文字中嵌入图片等功能