在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+"<img src=\"" + bqId + "\">", 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;
}
};
}
实现效果如下
相关推荐
在Android开发中,为了增强文本输入的趣味性和用户体验,我们经常需要在EditText或者TextView中插入表情。这通常涉及到SpannableString的使用。SpannableString是Android SDK提供的一种可变字符串,它允许我们在字符...
Android是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的移动操作系统,主要应用于移动设备,如智能手机和平板电脑。该系统最初由安迪·鲁宾开发,后被Google公司收购并注资,随后与多家硬件制造商、软件...
在Android开发中,TextView是用于显示文本的基本组件。然而,有时我们需要对文本进行更复杂的样式化,例如设置特定部分的背景色、添加点击事件、改变颜色等。这时,我们可以使用SpannableString类来实现这些需求。...
本篇文章将详细探讨如何在Android环境中实现一个基于RecyclerView的富文本编辑器。 首先,我们需要理解RecyclerView的基本概念。RecyclerView是一个高效的视图复用组件,它被设计用来展示大量的数据集,比如列表或...
在Android平台上,富文本解析是实现复杂文本展示和编辑的关键技术。富文本解析器能够将HTML和Markdown这两种标记语言转化为可读性强、样式丰富的文本,为用户提供了更佳的视觉体验。本文将深入探讨Android环境下如何...
开发者在使用这个类库时,可以轻松地集成到自己的项目中,通过简单的API调用来实现富文本编辑功能。例如,可能有`setFontSize()`、`boldText()`、`italicText()`等方法来改变文字样式,以及`insertImage()`和`delete...
H5端的富文本编辑器虽然常见,但在原生Android应用中,用户往往需要自行构建复杂的控件组合来实现类似功能。然而,有了`richeditor-android`,这一切变得简单而高效。这个开源框架专为Android平台设计,旨在提供与H5...
在这个场景下,“cocos2d-lua 实现富文本”意味着我们要探讨如何在 Cocos2d-lua 中创建和处理包含多种格式、样式和动态内容的文本。富文本允许开发者展示更加丰富多彩的文本效果,如字体变化、颜色渐变、链接点击等...
最近项目里因为有一些图文混排的需求,需要在Android TextView 增加多种类型的数据,诸如图片、按钮、拨号、链接、@功能等等。 示例1:使用 SpannableString,试了一下效果一般。(新手推荐) 示例2:后面也是参考了...
RichTextWrapper :TextView的包裹类,实现支持富文本,通过new RichTextWrapper(TextView v)来构造。 RTMovementMethod: 继承自Android原生的LinkMovementMethod,重写onTouchEvent方法,优化了ClickSpan(点击...
"android富文本预览和编辑"是一个专门针对这一需求设计的类库,它为开发者提供了一个高效且便捷的方式来实现富文本的编辑与预览。下面我们将详细探讨这个类库的功能、实现原理以及如何在项目中应用。 首先,该类库...
本篇文章将详细探讨如何在Android中实现一个基于原生EditText的富文本组件。 首先,`EditText`是一个简单的文本输入框,它可以接收用户的文本输入并显示。然而,它的功能相对有限,不支持诸如插入图片、设置文本...
在实现富文本元素插入到 EditText 中时,我们需要使用 ImageSpan来实现图片或视频的显示。实际上,ImageSpan 都是 BitmapDrawable。我们可以使用 View.inflate() 方法来 inflate 一个 View,然后将其添加到 EditText...
Android用最简单的方法实现富文本框效果,可以同时文字变化和插入图片的效果,如果不会用可以看一下我的博客地址为https://blog.csdn.net/qq_45137584/article/details/111174861。
当需要实现更复杂的文本样式,如改变文本颜色、设置背景色、调整字体大小,甚至实现图文混排和上下标时,普通的`String`就无法满足需求了,这时候我们需要引入`SpannableString`。 `SpannableString`是Android中的...
*支持Textview设置富文本点击 *设置Textview 中部分字设置可以点击、变色,设置setMovementMethod(LinkMovementMethod.getInstance())后滑动与Textview局部点击冲突...都已经解决. *解决点击空白区域依然有点击事件 ...
源码中,通常会使用`EditText`或自定义的`TextView`作为基础组件,通过扩展其功能来实现富文本编辑。 1.2 Spannable与Spanned 在Android中,`Spannable`和`Spanned`是处理富文本的关键类。`Spannable`允许在文本中...
在Android中,实现富文本编辑器通常有两种方式: 1. **使用内置组件**: Android SDK提供了一个名为`EditText`的基础控件,但其默认功能有限,不支持复杂的富文本操作。开发者可以通过添加第三方库来增强`EditText`...
3. 垂直居中:对于使文本垂直居中,Android默认的TextView可能无法直接实现,但可以借助`GravityDrawable`或自定义View来实现。不过,一种更简单的方法是使用`android:gravity="center_vertical"`属性,但这只会使...
本文将深入探讨Android富文本编辑器的实现,以及如何支持服务器返回的富文本信息的查看与修改。 一、富文本编辑器组件选择 Android系统本身提供了`EditText`组件,但其功能相对有限,无法满足复杂的富文本编辑需求...