android如何展示富文本_Android SpannableString实现富文本展现
在Android开发中,有许多信息展示需要通过TextView来展现,如果只是普通的信息展现,使用TextView setText(CharSequence str)设置即可,但是当在TextView里的这段内容需要截取某一部分字段,可以被点击以及响应响应的操作,这时候就需要用到SpannableString了,下面通过一段简单的代码实现部分文字被点击响应,及富文本表情的实现。public cla
在Android开发中,有许多信息展示需要通过TextView来展现,如果只是普通的信息展现,使用TextView setText(CharSequence str)设置即可,但是当在TextView里的这段内容需要截取某一部分字段,可以被点击以及响应响应的操作,这时候就需要用到SpannableString了,下面通过一段简单的代码实现部分文字被点击响应,及富文本表情的实现。
public class MainActivity extends Activity {
private TextView tv,tv1;
static Context ctx = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//富文本点击响应
tv = (TextView)findViewById(R.id.tv);
tv.setTextSize(20);
tv.setText(getClickableSpan());
tv.setMovementMethod(LinkMovementMethod.getInstance());
//添加了普通字符串和表情的展示
tv1 = (TextView)findViewById(R.id.tv1);
tv1.setText(transferBiaoQing("hello android",R.drawable.ic_launcher));
}
private SpannableString getClickableSpan() {
View.OnClickListener l = new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Click Success",
Toast.LENGTH_SHORT).show();
}
};
SpannableString spanableInfo = new SpannableString(
"This is a test, Click Me");
int start = 16;
int end = spanableInfo.length();
spanableInfo.setSpan(new Clickable(l), start, end,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
return spanableInfo;
}
/**
* 内部类,用于截获点击富文本后的事件
* @author pro
*
*/
class Clickable extends ClickableSpan implements OnClickListener {
private final View.OnClickListener mListener;
public Clickable(View.OnClickListener l) {
mListener = l;
}
@Override
public void onClick(View v) {
mListener.onClick(v);
}
@Override
public void updateDrawState(TextPaint ds) {
ds.setColor(ds.linkColor);
ds.setUnderlineText(false); //去除超链接的下划线
}
}
/**
* 将富文本转成CharSequence
* @param commonStr 普通内容
* @param bqId 表情图片
* @return
*/
public CharSequence transferBiaoQing(String commonStr,int bqId) {
return Html.fromHtml(commonStr+"", imageGetter, null);
}
/**
* 获取本地图片资源
*/
private ImageGetter imageGetter = new ImageGetter() {
@Override
public Drawable getDrawable(String source) {
int id = Integer.parseInt(source);
// 根据id从资源文件中获取图片对象
Drawable d = MainActivity.this.getApplicationContext().getResources().getDrawable(id);
// 以此作为标志位,方便外部取出对应的资源id
d.setState(new int[] { id });
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
return d;
}
};
}
实现效果如下
更多推荐
所有评论(0)