如何获取所有在 tag 属性中具有值的视图?

Posted

技术标签:

【中文标题】如何获取所有在 tag 属性中具有值的视图?【英文标题】:How can I get all views that have value in the tag attribute? 【发布时间】:2022-01-04 11:37:32 【问题描述】:

我有 7 个视图,在同一布局中有 android:tag="92832380",我尝试使用 findViewWithTag 获取这些视图,但它只返回 1 个视图(第一个视图)所以什么是获取所有具有 @987654325 的视图的最佳方法@值?

编辑

根据下面的cmets讨论,我找到了这种解决问题的方法,但这是一个好方法,还是有更好的方法?

【问题讨论】:

java 还是 kotlin ? @a_local_nobody Java 而不是这样做,而是解释为什么你首先使用标签?你想达到什么目的? 要支持多语言应用程序,您可以为每种语言设置样式并在其中设置字体属性,然后您可以将样式用于视图。给这个东西贴标签只会让它变得复杂。如果您的应用同时显示多种语言,那么您也可以为视图设置不同的样式。由于您已经添加了标签,即您事先已经知道哪个 textview 将具有哪种字体,所以应该很难做到。 您不必复制所有内容,只需复制您想要与众不同的部分即可。要使用字体,您必须创建一个 font.xml 文件。只需寻找如何在 android 中使用自定义字体。你会得到它。 【参考方案1】:

你可以试试这种方式

fun getViewsByTag(rootView: ViewGroup, tag: String): ArrayList<View>? 
        val views = ArrayList<View>()
        val childCount = rootView.childCount
        for (i in 0 until childCount) 
            val child = rootView.getChildAt(i)
            if (child is ViewGroup) 
                views.addAll(getViewsByTag(child, tag)!!)
            
            val tagObj = child.tag
            if (tagObj != null && tagObj == tag) 
                views.add(child)
            
        
        return views
    

如果您有多个具有相同标签的视图,您可以通过is 来识别它们,例如if (child is EditText)

【讨论】:

以上是关于如何获取所有在 tag 属性中具有值的视图?的主要内容,如果未能解决你的问题,请参考以下文章

在 JPA 中,我如何找到具有属性值的所有类型和具有属性值的 ManyTomany 相关实体?

如何查询具有特定属性值的核心数据对象

如何从对象数组中获取具有属性的列表,除非它包含具有特定值的另一个项目?

如何在 mySql 中获取所有具有值的条目,然后遍历 foreach

获取下拉框属性

如何从嵌套对象中获取具有值的所有键