android 多行文本换行,Android进阶——或许是处理“More&click”型多行的TextView换行的最优雅的一种方式...

本文介绍了如何优雅地处理Android中TextView的多行文本换行问题,通过ViewTreeObserver监听布局变化,结合SpannableString和ClickableSpan实现动态适配和点击事件,提供了一个在文本超出指定长度时显示'More'并添加点击功能的解决方案。
摘要由CSDN通过智能技术生成

引言

相信很多Android APP 开发者在处理TextView 换行的时候都曾头痛不已过,尤其是在做复杂布局的时候,适配的时候都踩过不少坑。笔者也踩过,直到在一次查看源码的时候发现了ViewTreeObserver,总算是实现了优雅的格式化多行文本,在使用一个控件的时候抽点时间了解下提供的公共方法,有时候可以避免很多不必要的坑。

一、ViewTreeObserver概述

ViewTreeObserver顾名思义就是视图树的观察者角色,可以监听视图树的全局变化,比如整棵树的布局,开始的绘画传递,触摸模式的改变等等,都提供了对应的八个监听接口(A view tree observer is used to register listeners that can be notified of global changes in the view tree)。ViewTreeObserver用来注册监听器,在视图树全局发生变化时收到通知。它不能被应用实例化,因为它是由视图提供,只能通过调用android.view.View的getViewTreeObserver()来获取对应的实例。

dc882aa97fed?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

这里写图片描述

其实整个ViewTreeObserver机制从源码上看,本质上就是个观察者模式,那么主要的角色就有两种:

ViewTree视图树——在Android中所有视图由View和View的子类组成。ViewGroup也是view的子类,它是View的容器,它可以装载View和ViewGroup。这样ViewGroup和View以树形结构一层一层的嵌套组合,就形成了视图树。

Observer观察者。使用了观察者的设计模式,ViewTree是被观察者(或者说是主题、内容),ViewTreeObserver是观察者,通过ViewTreeObserver注册监听来观察ViewTree的变化,当ViewTree发生变化,就会调用ViewTreeObserver的相关方法来通知其这一改变。我们可以在ViewTreeObserver中add自己的监听器,从而得到ViewTree的某一变化的通知做出自己的逻辑处理。

二、SpannableString和ClickableSpan概述

SpannableString和ClickableSpan本质上就是高级的String,具体可参见Android进阶——借助强大Span家族增添丰富的特效及格式化字符串。

三、实现思路

简单来说就是实现根据TextView要实现的字符串长度去动态适配。

通过ViewTreeObserver机制监听,TextView绘制之后,在OnGlobalLayoutListener中计算原始的字符串长度,当多行显示的时候,以第一行所显示字符的个数为行长。

判断最后一行的长度,并进行逻辑处理,添加“More”型字符串

以Span系为辅助实现点击,并开放接口

四、实现源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值