从LinearLayout获取子元素

时间:2011-07-07 19:03:17

标签: java android android-linearlayout

有没有办法获取LinearLayout的子元素?我的代码返回一个视图(linearlayout),但我需要访问布局中的特定元素。

有什么建议吗?

(是的,我知道我可以使用findViewById,但我在java中创建布局/子项 - 而不是XML。)

7 个答案:

答案 0 :(得分:78)

您可以随时执行以下操作:

LinearLayout layout = setupLayout();
int count = layout.getChildCount();
View v = null;
for(int i=0; i<count; i++) {
    v = layout.getChildAt(i);
    //do something with your child element
}

答案 1 :(得分:19)

我认为这有助于:findViewWithTag()

将TAG设置为您添加到布局的每个视图,然后通过TAG获取该视图,就像使用ID

一样

答案 2 :(得分:4)

我会避免从视图的子项中静态地抓取元素。它现在可能会起作用,但会使代码难以维护,并且很容易在将来的版本中出现问题。如上所述,正确的方法是设置标签并通过标签获取视图。

答案 3 :(得分:3)

LinearLayout layout = (LinearLayout)findViewById([whatever]);
for(int i=0;i<layout.getChildCount();i++)
    {
        Button b =  (Button)layout.getChildAt(i)
    }

如果它们都是按钮,则转换为查看并检查类

View v =  (View)layout.getChildAt(i);
if (v instanceof Button) {
     Button b = (Button) v;
}

答案 4 :(得分:2)

你可以这样做。

ViewGroup layoutCont= (ViewGroup) findViewById(R.id.linearLayout);
getAllChildElements(layoutCont);
public static final void getAllChildElements(ViewGroup layoutCont) {
    if (layoutCont == null) return;

    final int mCount = layoutCont.getChildCount();

    // Loop through all of the children.
    for (int i = 0; i < mCount; ++i) {
        final View mChild = layoutCont.getChildAt(i);

        if (mChild instanceof ViewGroup) {
            // Recursively attempt another ViewGroup.
            setAppFont((ViewGroup) mChild, mFont);
        } else {
            // Set the font if it is a TextView.

        }
    }
}

答案 5 :(得分:0)

最直接的方法之一是使用其ID访问子视图。

view.findViewById(R.id.ID_OF_THE_CHILD_VIEW)

这里的视图是父视图。

例如,您的子视图是一个ID为img_profile的图像视图,您可以做的是:

ImageView imgProfile = view.findViewById(R.id.img_profile)

答案 6 :(得分:0)

Kotlin版本的解决方案为:

val layout: LinearLayout = setupLayout()
        val count = layout.childCount
        var v: View? = null
        for (i in 0 until count) {
            v = layout.getChildAt(i)
            //do something with your child element
        }