Android从FrameLayout获取孩子

时间:2019-01-31 06:50:33

标签: android android-layout android-view

如果我创建两个类,则扩展FrameLayout的Parent类和扩展View的Child类,然后使用XML对其进行初始化。是否可以从Parent类构造函数中获取子元素?如果我使用getChildAt(),由于该活动仍然没有创建,我总是得到null。

 <com.example.Parent 
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:layout_centerInParent="true">

        <com.example.Child
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <com.example.Child
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </com.example.Parent>

父级和子级

public class Parent extends FrameLayout { 
    public Parent(@NonNull Context context) {
         super(context);
         this.getChildAt(0); // return null
    }
...  
}

public class Child extends View {  
...  
}

2 个答案:

答案 0 :(得分:1)

由于您在getChildAt的构造过程中正在调用FrameLayout,因此您会得到空值(您的孩子仍然没有完全附加到视图上)。一种解决方案是覆盖onLayout()onMeasure()来生孩子。

答案 1 :(得分:1)

膨胀之前,您无法获得父级的子视图。

但是您可以动态地进行操作,但也可以像一样进行操作,您必须手动将视图添加到父视图。

然后您可以从“父视图”中获得子视图。