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