Android SpannableString和SpannableStringBuilder教程

本文是针对Android开发中给TextView增加样式的教程,重点介绍了SpannableString和SpannableStringBuilder的使用,包括设置颜色、大小、背景、点击事件等。通过实战示例展示了如何使用这些技术,同时推荐了一个辅助工具类简化操作。
摘要由CSDN通过智能技术生成

给TextView增加样式

一.导引

1.适用对象
  • 没有接触过SpannableString的人

  • 听过但是不熟悉不了解SpannableString的人。

2.教程结构
  • 简介
  • SpannableString
  • SpannableStringBuilder
  • 实战部分
  • 总结和感想(作者瞎逼逼时间)

二.正文

1.简介

SpannableString和SpannableStringBuilder的关系类似于String和StringBuilder。前者不可变,后者可变。所以两者的使用方法基本相同。

功能在于给一串普通的字符串加上颜色,大小背景等样式和特殊事件(点击事件)。下面先上一个例子

这个例子很普通,小伙伴们一看可能会觉得这不就是几个TextView吗?

没错,这就是TextView。但不是几个,而是一个,只用一个TextView显示出这串花花绿绿的文字是不是很?的感觉呢?

这个时候可能有小伙伴会说:“一个TextView?也简单啊,我写成html,加点color,background样式,然后用 Html.fromHtml( ) 一下还不是轻轻松松,要你这破Span啥啥的干啥用!”

没错,这样子是能实现这个效果,但是你们不觉得一串串html的代码硬编码在Android项目里很难看么!而且经过我对 Html.fromHtml( ) 的源码的研究发现,这个方法并没有什么神秘之处(能够DuangDuang的就给文字加特技,呸! 加样式)。

mSpannableStringBuilder = new SpannableStringBuilder();
if (end == start) {
                mSpannableStringBuilder.removeSpan(obj[i]);
            } else {
                mSpannableStringBuilder.setSpan(obj[i], start, end, Spannable.SPAN_PARAGRAPH);
            }

上面是截取了部分Html.fromHtml( ) 方法调用的源码。细心的小伙伴们肯定发现了,这里面出现了个SpannableStringBuilder()。所以一切真相大白了,原来该方法将html解析之后通过SpannableStringBuilder来给他添加样式。看到这的小伙伴们是不是学会用SpannableStringBuilder很有用了呢!?

2.SpannableString
        SpannableString ss=new SpannableString("这是另外一串普通的文字");
        ForegroundColorSpan colorSpan=new ForegroundColorSpan(Color.RED);
        ss.setSpan(colorSpan,0,5,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv.setText(ss);

使用方法和SpannableStringBuilder类似,简单举个例子,不做过多的解释。

3.SpannableStringBuilder

本章的主角,SpannableString的好基友。

class SpannableStringBuilder implements CharSequence, GetChars, Spannable, Editable,
        Appendable, GraphicsOperations{}
//这里主要注意CharSequence和Spannable
//继承自Spannable,赋予了它给文本设定样式的基础功能
//实现接口
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
你可以使用SpannableString和ClickableSpan来实现点击跳转到其他页面的功能。下面是一个示例代码: 首先,你需要在你的FragmentJiaoBanDay0类中添加一个静态方法,用于创建新的实例并传递参数: ```java public static FragmentJiaoBanDay0 newInstance(String name, CharSequence text) { FragmentJiaoBanDay0 fragment = new FragmentJiaoBanDay0(); Bundle args = new Bundle(); args.putString("name", name); args.putCharSequence("text", text); fragment.setArguments(args); return fragment; } ``` 然后,在FragmentJiaoBanDay0的onCreateView方法中,获取传递过来的参数并设置SpannableString的点击跳转功能: ```java @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_jiao_ban_day0, container, false); TextView textView = view.findViewById(R.id.text_view); String name = getArguments().getString("name"); CharSequence text = getArguments().getCharSequence("text"); SpannableString spannableString = new SpannableString(text); ClickableSpan clickableSpan = new ClickableSpan() { @Override public void onClick(View view) { // 在这里处理点击事件,跳转到其他页面 // 例如:startActivity(new Intent(getContext(), OtherActivity.class)); } @Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); // 设置点击文本的样式,例如颜色、下划线等 ds.setUnderlineText(false); ds.setColor(Color.BLUE); } }; spannableString.setSpan(clickableSpan, 0, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); textView.setText(spannableString); textView.setMovementMethod(LinkMovementMethod.getInstance()); return view; } ``` 在这个示例中,我们使用了TextView来显示SpannableString,并且通过设置ClickableSpan来实现点击跳转功能。你可以根据实际需求进行适当的修改。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值