自定义ViewGroup中的RelativeLayout如何获得其度量?

时间:2016-03-16 01:32:13

标签: android android-layout android-relativelayout android-viewgroup

在创建自定义ViewGroup的过程中遇到了问题。我使用以下代码创建了一个ViewGroup:

import android.content.Context;
import android.graphics.RectF;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;

public class noteLayout extends ViewGroup {
    float leftOrientationSize = 0;
    float rightOrientationSize=0;
    public noteLayout(Context activityContext)
    {
        super(activityContext);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        RelativeLayout mainParent = (RelativeLayout) getParent();
        final RelativeLayout child = (RelativeLayout) getChildAt(0);
        for (int i = 0; i < child.getChildCount(); i++) {
            final View childOfChild = child.getChildAt(i);
            if (childOfChild != null) {
                childOfChild.measure(MeasureSpec.makeMeasureSpec((mainParent.getWidth() / 2) - 30, MeasureSpec.AT_MOST), MeasureSpec.makeMeasureSpec(mainParent.getHeight(), MeasureSpec.AT_MOST));
            }
        }
        child.measure(MeasureSpec.makeMeasureSpec((mainParent.getWidth() / 2) - 30, MeasureSpec.AT_MOST), MeasureSpec.makeMeasureSpec((mainParent.getHeight() / 2) - 300, MeasureSpec.AT_MOST));
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        int numberOfChild = getChildCount();
        for (int i = 0;i<numberOfChild;i++){
            View childView = getChildAt(i);
            float childHeight = (float) childView.getMeasuredHeight();
            float childWidth = (float) childView.getMeasuredWidth();
            RectF rect = new RectF();
            rect.bottom = childHeight+20;
            rect.top = 20;
            rect.left = 20;
            rect.right = childWidth+20;
            childView.layout((int) rect.left, (int) rect.top, (int) rect.right, (int) rect.bottom);
        }
    }
}

所以我基本上通过noteLayout customViewgroup = new noteLayout();实例化我的ViewGroup的新实例。然后,customViewgroup.addView(getLayoutInflater().inflate(R.Layout.test3,null));将test3 xml布局添加到我的CustomViewGroup中。然后我获得了对主活动相对布局的引用,并使用我的主要活动Relative Layout的addView(customViewGroup)方法添加到包含test3布局的CustomViewGroup中。

我的test3布局如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" android:background="@android:color/holo_blue_bright"
    android:id="@+id/ma"
    android:elevation="5dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Note"
        android:id="@+id/displayNote"
        android:paddingBottom="10dp"
        android:paddingLeft="8dp"
        android:paddingRight="8dp"
        android:ellipsize="end"
        android:layout_below="@+id/textView2"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Title:"
        android:id="@+id/textView2"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:paddingLeft="8dp"
        android:paddingRight="8dp"/>

</RelativeLayout>

我的问题是我不明白我的ViewGroup如何测量它包含的相对布局中的TextView,所以这里有一些图片可以解释我的担忧。

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

所以上面的图像按顺序排列。青色背景上的图像是我的xml布局中test3的图像,第二个是它实际渲染的图像。我担心的是我不知道到底发生了什么,因为图像渲染的方式与我在xml Layout中的方式不匹配。有时候Note文本会出现在中间,有时它会消失,这取决于它在relativelayout上的位置。但是,我担心的是,与xml设计选项卡中的注释视图相比,为什么注释视图的呈现方式如此不同?也许我的ViewGroup可能编码错误?

0 个答案:

没有答案