如何在android中直接获取所有子视图和hirechery

Posted

技术标签:

【中文标题】如何在android中直接获取所有子视图和hirechery【英文标题】:how to get all child view direct and hirechery in android 【发布时间】:2015-03-23 07:56:16 【问题描述】:

我有这样的用户界面:

<RelativeLayout>
       <TextView />
       <RelativeLayout>
             <TextView />
             <TextView />
             <LinearLayout>
                  <TextView />
             </LinearLayout>
       </RelativeLayout>
</RelativeLayout>

我想以编程方式访问所有 TextView 并更改一些属性,但是 我不想使用 id 和 findViewById,因为我有一个多布局,我想在其中执行相同的更改,即:更改 TextViews 的字体。

如何访问所有 TextView,无论是直接视图还是层次视图,例如循环或列表中的 RelativeLayout?

【问题讨论】:

编写一个递归(甚至是线性)算法来遍历视图层次结构是微不足道的。大多数解决方案已经在here 中进行了概述。您需要做的就是为您感兴趣的特定视图类型添加一些类型检查。 【参考方案1】:
    LinearLayout mLinearLayout = (LinearLayout) findViewById(R.id.my_linear_layout);

    for(i = 0; i <= mLinearLayout.getChildCount(); i++) 
        View view = mLinearLayout.getChildAt(i); 
        if (view instanceof TextView) 
            TextView textView = (TextView) view;
            // TODO do your stuff 
         
    

如果您的 RelativeLayout 中有 ViewGroups,那么您需要编写一个递归方法。

【讨论】:

"如果您的 RelativeLayout (...) 中有 ViewGroups" - 根据问题,这里没有太多 if。 .. 第一级有一个RelativeLayout,第二级有一个LinearLayout 他应该研究一些来提高自己:P

以上是关于如何在android中直接获取所有子视图和hirechery的主要内容,如果未能解决你的问题,请参考以下文章

循环遍历Android视图的所有子视图?

一次获取 LinearLayout 中的所有子视图

如何获取一个节点的所有直接子节点的集合?

Objective-C - 获取主窗口内容视图的所有子视图

如何从列表视图中的项目单击中获取歌曲在android中

如何在 Android 的滚动视图中放大/更改子图像视图尺寸以使图像全尺寸