起因:
項(xiàng)目用遇到一個(gè)問(wèn)題,由于某種語(yǔ)言字體的特性,要針對(duì)該語(yǔ)言專門(mén)調(diào)整行間距
由于涉及到多個(gè)頁(yè)面,每頁(yè)又有多個(gè)多行的textview,難道要對(duì)每個(gè)textview的初始化進(jìn)行一次處理么?如何優(yōu)雅的對(duì)每個(gè)textview實(shí)行間距調(diào)整?
思路
是想在rootRiew里找到所有的多行textview,統(tǒng)一調(diào)整間距
方案1:
用getChildAt的方法只能get到一層child,如果某個(gè)child還是Viewgroup,還需要遍歷該ViewGroup,套路太深,還要各種判斷,吃相十分難看,此路不通。
方案2:
想到前端的css樣式的實(shí)現(xiàn)方式,android有沒(méi)有可能給textView加個(gè)tag,通過(guò)tag來(lái)獲取某一類型的控件,然后一起設(shè)置效果呢?然而卻發(fā)現(xiàn)findViewwithTag每次也只能返回一個(gè)view。繼續(xù)不通
方案3:
在輸入findview的時(shí)候,studio提示了findViewsWithText,起初看到是個(gè)void方法,覺(jué)得不可用,結(jié)果深入一看,才知道他就是我想要的!
上代碼
?View里的findViewsWithText

ViewGroup里重寫(xiě)了該方法

一看源碼,豁然開(kāi)朗,遞歸調(diào)用,查找所有符合的view,判斷條件是 contentdiscription是否包含搜索值,添加到要輸出的ArrayList里
最終解決辦法:
在多行的textView加一個(gè)contentDescription 屬性,然后傳一個(gè)空的ArrayList,調(diào)用findviewsWithText方法,就可以愉快的得到所有想要的TextView了。