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

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

编辑

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

【问题讨论】:

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

标签: android android-layout


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2023-01-20
    • 2022-06-20
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    相关资源
    最近更新 更多