findViewsWithText的使用

作者: 简小郎 | 来源:发表于2017-07-30 10:32 被阅读0次

    起因:

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

    由于涉及到多个页面,每页又有多个多行的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了。

    相关文章

      网友评论

        本文标题:findViewsWithText的使用

        本文链接:https://www.haomeiwen.com/subject/dkuhlxtx.html