安卓实现富文本(1)

本篇文章实现自我编辑富文本,就是说可以实现让自己编辑的文字以富文本的形式展示

主要参考的是这位大神的博客

展示富文本的思路

  • 首先需要拿到用户在编辑框编辑的文字
  • 然后根据用户选择的富文本方式(比如说,一些文字的颜色改变,文字背景改变,部分文字变大变小等等)
  • 用特定的工厂类将用户选择的文字包装即可
  • 嗯。。。。。关于这个工厂类google已经帮我们写好了,接下来看我们直接用就好
    ###先来看下简单的效果
    这里写图片描述
    • emmmmm.效果就是这样,只是上下两个简单的textView,只是将我们给她设置的字符串用特定的工具类处理之后就变成了丰富多彩的富文本

话不多说,来看google为我们提供的好东西吧

  • Google提供富文本封装类Spannable
  • 他提供两个方法
public void setSpan(Object what, int start, int end, int flags);
public void removeSpan(Object what);
  • 第一个方法是来为特定的文字设置富文本效果的,第一个参数是一个工具实例类,它表明了文字的格式,第二个和第三个表明你要给哪些文字设置,最后一个是对第二个和第三个参数的注释,就相当于数学中集合的左闭右开,左开右闭等等,不够我试了好几次,好像并没有用,不过大家对这个也不用太过关心,只需要按需要设置好第二个和第三个参数就好了
  • 第二个方法明显是移除某种文字效果

看一下具体代码实现吧

var textView = findViewById<TextView>(R.id.main_TextView)
var s = "测试测试,再说一遍,这真的是测试文字!"
val spannable = Spannable.Factory.getInstance().newSpannable(s)//将字符串包装成可操作的文本格式
val backgroundColorSpan = BackgroundColorSpan(Color.parseColor("#FF0000"))//实例一个具体富文本格式工具类
spannable.setSpan(backgroundColorSpan, 0, 9, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)//给0-9的字符设置成上面那种背景
tv!!.setText(spannable)
  • 嗯,你没有看错,就是这么简单
  • 接下来我的一般的富文本格式工具类罗列一下
BackgroundColorSpan backgroundColorSpan = new BackgroundColorSpan(Color.parseColor("#FF0000"));//文字背景,也就是文字的颜色

ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.parseColor("#FF0000"));//文字前景

RelativeSizeSpan sizeSpanBig = new RelativeSizeSpan(1.4f);//放大或者缩小,取决于后面的浮点数大于或者小于一

StrikethroughSpan strikethroughSpan = new StrikethroughSpan();//删除线,就是文字中间一条线

UnderlineSpan sizeSpan = new UnderlineSpan();//下划线

StyleSpan styleSpan_Bold = new StyleSpan(Typeface.BOLD);//粗体

StyleSpan styleSpan_Italic = new StyleSpan(Typeface.ITALIC);//斜体


//这三句是构建一个图片,注意将图片设置进去的时候会覆盖那个第二个和第三个参数的所在的字
Drawable image = this.getResources().getDrawable(R.mipmap.star);
image.setBounds(0,0,60,60);
ImageSpan imageSpan = new ImageSpan(image);
  • 还有两个特殊的
spannable.setSpan(new ClickableSpan() {
               @Override
               public void onClick(View widget) {
                   Toast.makeText(this, "点击测试", Toast.LENGTH_LONG).show();
               }
    },9, spannable.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
mTextView.setMovementMethod(LinkMovementMethod.getInstance());
URLSpan urlSpan = new URLSpan("http://blog.csdn.net/lpc_java?viewmode=list");
spannableUrl.setSpan(urlSpan, 9, spannable.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
textView.setMovementMethod(LinkMovementMethod.getInstance());
  • 还可以设置文字的点击事件,是不是超级炫
  • 注意:textView.setMovementMethod(LinkMovementMethod.getInstance());必须设置TextView的MovementMethod才有点击效果
    ###总结
    • 如果我们想自己写一个富文本编辑器,是不是就可以通过自己设置按钮,来关联不同的工具类来实现不同的文本形式了呢
    • 最后粘贴一下官方的这些工具类的地址吧,你可以去瞧瞧有没有自己感兴趣的格式呢
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值