findViewsWithText的使用

起因:

项目用遇到一个问题,由于某种语言字体的特性,要针对该语言专门调整行间距

由于涉及到多个页面,每页又有多个多行的textview,难道要对每个textview的初始化进行一次处理么?如何优雅的对每个textview实行间距调整?

思路

是想在rootRiew里找到所有的多行textview,统一调整间距

方案1:

用getChildAt的方法只能get到一层child,如果某个child还是Viewgroup,还需要遍历该ViewGroup,套路太深,还要各种判断,吃相十分难看,此路不通。

方案2:

想到前端的css样式的实现方式,android有没有可能给textView加个tag,通过tag来获取某一类型的控件,然后一起设置效果呢?然而却发现findViewwithTag每次也只能返回一个view。继续不通

方案3:

在输入findview的时候,studio提示了findViewsWithText,起初看到是个void方法,觉得不可用,结果深入一看,才知道他就是我想要的!

上代码

 View里的findViewsWithText

ViewGroup里重写了该方法

一看源码,豁然开朗,递归调用,查找所有符合的view,判断条件是 contentdiscription是否包含搜索值,添加到要输出的ArrayList里

最终解决办法:

在多行的textView加一个contentDescription 属性,然后传一个空的ArrayList,调用findviewsWithText方法,就可以愉快的得到所有想要的TextView了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容