android - onMeasure 没有在我的自定义 View 组 android 中被调用

标签 android android-custom-view viewgroup

我有两个自定义 viewgroupssuperViewGroupsubViewGroup。 subview 组包含 View 。我将我的 superviewgroup 添加到 linearLayout 并将 subViewGroups 添加到我的 superviewgroup

正在调用 superviewgroup onMeasure() 但不在 subviewgroup 中。但在这两种情况下,都会调用 onLayout() 方法。

代码如下

public class SuperViewGroup extends ViewGroup{

    public SuperViewGroup(Context context) {
        super(context);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        Log.i("boxchart","INSIDE ON MEASURE SUPER VIEWGROUP");
    }



    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {

        final int count = getChildCount();

        for (int i = 0; i < count; i++) {
            final View child = getChildAt(i);
            if (child.getVisibility() != View.GONE) {
                child.layout(0, 0, getWidth(), getHeight());

            }
        }


    }


}


public class SubViewGroup extends ViewGroup{

    public SubViewGroup(Context context) {
        super(context);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        Log.i("boxchart","INSIDE ON MEASURE SUB VIEWGROUP");
    }



    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {

        final int count = getChildCount();

        for (int i = 0; i < count; i++) {
            final View child = getChildAt(i);
            if (child.getVisibility() != View.GONE) {
                child.layout(0, 0, getWidth(), getHeight());

            }
        }


    }


}

欢迎评论。提前致谢。

最佳答案

因为您必须实际将度量传递给 subview :

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    Log.i("boxchart","INSIDE ON MEASURE SUPER VIEWGROUP");
    final int count = getChildCount();
    for (int i = 0; i < count; i++) {
        final View child = getChildAt(i);
        if (child.getVisibility() != View.GONE) {
            //Make or work out measurements for children here (MeasureSpec.make...)
            measureChild (child, widthMeasureSpec, heightMeasureSpec);
        }
    }
}

否则你永远不会真正衡量你的 child 。由您决定如何执行此操作。仅仅因为您的 SuperViewGroup 是线性布局,您的 SuperViewGroup 就负责测量其子级。

关于android - onMeasure 没有在我的自定义 View 组 android 中被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7749954/

相关文章:

android - 在 Android 导航栏顶部绘制位图

android - 无法解决改造2的依赖关系

java - 如何调整ScrollView中的Banner广告

java - Android-获取customListview中第一行的值(共享首选项)

java - 在自定义 View 中嵌入 RecyclerView

android - 如何创建一个包含多个 View 的按钮?

android - 如何扫描并发现网络中的所有主机

android - 无法从 Android 客户端连接到 Tridion 核心服务

android - 唯一标识android复合 View 中的元素

android - 获取对父 ViewGroup 的引用