`
sinye
  • 浏览: 218915 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android SpannableString实现富文本展现

 
阅读更多

在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;
        }
    };
}

 

实现效果如下



 

  • 大小: 20.1 KB
0
0
分享到:
评论

相关推荐

    Android基于SpannableString的富文本编辑器.zip

    Android是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的移动操作系统,主要应用于移动设备,如智能手机和平板电脑。该系统最初由安迪·鲁宾开发,后被Google公司收购并注资,随后与多家硬件制造商、软件...

    Android TextView使用SpannableString设置复合文本的方法详解

    在Android开发中,TextView是用于显示文本的基本组件。然而,有时我们需要对文本进行更复杂的样式化,例如设置特定部分的背景色、添加点击事件、改变颜色等。这时,我们可以使用SpannableString类来实现这些需求。...

    Android 富文本编辑,基于RecyclerView

    本篇文章将详细探讨如何在Android环境中实现一个基于RecyclerView的富文本编辑器。 首先,我们需要理解RecyclerView的基本概念。RecyclerView是一个高效的视图复用组件,它被设计用来展示大量的数据集,比如列表或...

    Android平台下的富文本解析器,支持Html和Markdown.rar

    在Android平台上,富文本解析是实现复杂文本展示和编辑的关键技术。富文本解析器能够将HTML和Markdown这两种标记语言转化为可读性强、样式丰富的文本,为用户提供了更佳的视觉体验。本文将深入探讨Android环境下如何...

    Android富文本编辑器(高仿简书)

    开发者在使用这个类库时,可以轻松地集成到自己的项目中,通过简单的API调用来实现富文本编辑功能。例如,可能有`setFontSize()`、`boldText()`、`italicText()`等方法来改变文字样式,以及`insertImage()`和`delete...

    移动端强大的富文本编辑器richeditor-android

    H5端的富文本编辑器虽然常见,但在原生Android应用中,用户往往需要自行构建复杂的控件组合来实现类似功能。然而,有了`richeditor-android`,这一切变得简单而高效。这个开源框架专为Android平台设计,旨在提供与H5...

    Android-AndroidRichText富文本解析器支持网络图片图片和链接点击事件

    "Android-AndroidRichText富文本解析器支持网络图片图片和链接点击事件"这个项目专注于提供一种高效且功能丰富的解决方案来处理富文本内容。富文本解析器允许开发者在应用中展示不仅仅是纯文本,还可以包括格式化...

    android SpannableString + 图文混排 + @功能

    最近项目里因为有一些图文混排的需求,需要在Android TextView 增加多种类型的数据,诸如图片、按钮、拨号、链接、@功能等等。 示例1:使用 SpannableString,试了一下效果一般。(新手推荐) 示例2:后面也是参考了...

    Android RichText 让Textview轻松的支持富文本(图像ImageSpan、点击效果等等类似QQ微信聊天)

    RichTextWrapper :TextView的包裹类,实现支持富文本,通过new RichTextWrapper(TextView v)来构造。 RTMovementMethod: 继承自Android原生的LinkMovementMethod,重写onTouchEvent方法,优化了ClickSpan(点击...

    Android--EditText的富文本组件

    本篇文章将详细探讨如何在Android中实现一个基于原生EditText的富文本组件。 首先,`EditText`是一个简单的文本输入框,它可以接收用户的文本输入并显示。然而,它的功能相对有限,不支持诸如插入图片、设置文本...

    Android实现EditText的富文本编辑

    在实现富文本元素插入到 EditText 中时,我们需要使用 ImageSpan来实现图片或视频的显示。实际上,ImageSpan 都是 BitmapDrawable。我们可以使用 View.inflate() 方法来 inflate 一个 View,然后将其添加到 EditText...

    Android-圆角背景的SpannableString后期会加入些许封装

    在本篇内容中,我们将深入探讨如何实现Android中的圆角背景SpannableString,并讨论可能的封装方法。 SpannableString是Android SDK提供的一种字符串对象,它允许我们在字符串的不同部分应用不同的样式,如颜色、...

    Android用最简单的方法实现富文本框效果,可以同时文字变化和插入图片的效果

    Android用最简单的方法实现富文本框效果,可以同时文字变化和插入图片的效果,如果不会用可以看一下我的博客地址为https://blog.csdn.net/qq_45137584/article/details/111174861。

    Android 图片混排富文本编辑器控件【源码】

    1.1 图片混排富文本控件 是一种图片和文字混合在一起的控件,文本之间可以插入图片,类似于网页的排版样式。 1.2 该控件主要是仿兴趣部落的效果,实现原理主要基于RecyclerView方案实现的。

    cocos2d-lua 实现富文本

    在这个场景下,“cocos2d-lua 实现富文本”意味着我们要探讨如何在 Cocos2d-lua 中创建和处理包含多种格式、样式和动态内容的文本。富文本允许开发者展示更加丰富多彩的文本效果,如字体变化、颜色渐变、链接点击等...

    SpannableString实现绚丽的文本和图文混排

    当需要实现更复杂的文本样式,如改变文本颜色、设置背景色、调整字体大小,甚至实现图文混排和上下标时,普通的`String`就无法满足需求了,这时候我们需要引入`SpannableString`。 `SpannableString`是Android中的...

    Android SpannableString设置超链接、颜色、字体等属性

    Android SpannableString设置超链接、颜色、字体等属性 在Android中,TextView是我们最常用的用来显示文本的控件。  一般情况下,TextView中的文本都是一个样式。那么如何对于TextView中各个部分的文本来设置字体...

    Android Textview 支持ClickableSpan(富文本)

    *支持Textview设置富文本点击 *设置Textview 中部分字设置可以点击、变色,设置setMovementMethod(LinkMovementMethod.getInstance())后滑动与Textview局部点击冲突...都已经解决. *解决点击空白区域依然有点击事件 ...

    Android高级应用源码-Android富文本编辑器源码+服务端.zip

    源码中,通常会使用`EditText`或自定义的`TextView`作为基础组件,通过扩展其功能来实现富文本编辑。 1.2 Spannable与Spanned 在Android中,`Spannable`和`Spanned`是处理富文本的关键类。`Spannable`允许在文本中...

    Android富文本编辑器+WebView显示

    在Android中,实现富文本编辑器通常有两种方式: 1. **使用内置组件**: Android SDK提供了一个名为`EditText`的基础控件,但其默认功能有限,不支持复杂的富文本操作。开发者可以通过添加第三方库来增强`EditText`...

Global site tag (gtag.js) - Google Analytics