起因:
项目用遇到一个问题,由于某种语言字体的特性,要针对该语言专门调整行间距
由于涉及到多个页面,每页又有多个多行的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了。