查找带标签的所有视图?

Kev*_*ker 37 android

我希望在指定活动中查找具有标签"balloon"的所有视图,例如然后使用setVisibilityto 隐藏它们GONE.

有谁知道如何检索具有给定标记的视图列表?

Shl*_*rtz 60

干得好:

private static ArrayList<View> getViewsByTag(ViewGroup root, String tag){
    ArrayList<View> views = new ArrayList<View>();
    final int childCount = root.getChildCount();
    for (int i = 0; i < childCount; i++) {
        final View child = root.getChildAt(i);
        if (child instanceof ViewGroup) {
            views.addAll(getViewsByTag((ViewGroup) child, tag));
        }

        final Object tagObj = child.getTag();
        if (tagObj != null && tagObj.equals(tag)) {
            views.add(child);
        }

    }
    return views;
}
Run Code Online (Sandbox Code Playgroud)

我已在这里回答:Android - 如何使用common属性查找多个视图

  • 你怎么会得到一个视图组? (2认同)

Coo*_*ter 9

您可以通过以下方式为视图设置标记:

someView.setContentDescription("MyTag");
Run Code Online (Sandbox Code Playgroud)

然后,为了找到您需要调用该标记的所有视图:

ArrayList<View> outputViews = new ArrayList<>();
rootView.findViewsWithText(outputViews, "MyTag", FIND_VIEWS_WITH_CONTENT_DESCRIPTION); 
Run Code Online (Sandbox Code Playgroud)

  • 完美的。工作得很棒。比公认的答案小而更好的方法.. (2认同)
  • 这应该是接受的答案,简单易行; 但要注意本地化可能会改变contentDescription (2认同)
  • 不好!ContentDescription用于可访问性。使用`android:tag`或`view.setTag()`参见上文[接受的答案](/sf/answers/1138373561/) (2认同)

Sam*_*muh 6

一种方法是从父ViewGroup开始,循环遍历其子项(及其子项等),然后检查每一个上的标记.

  • 好吧,你从来没有在你的问题中提到`MapView`和覆盖,是吗?我的回答是针对你的问题:"有没有人知道如何使用给定的TAG检索视图列表?" (5认同)