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

findViewsWithText的使用_第1张图片

ViewGroup里重写了该方法

findViewsWithText的使用_第2张图片

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

最终解决办法:

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

你可能感兴趣的:(findViewsWithText的使用)