yuanzi 2011年05月24日
自定义ViewGroup中不能正确显示 其它的viewGroup
问题描述:

小弟写了一个MyViewGroup(extends ViewGroup),在MyViewGroup中可以正确显示child view都是widget类型的(例如Button,ImageButton),但不能正确显示其它的ViewGroup比如系统的RelativeLayout。我在xml中RelativeLayout里面只定义了一个ImageButton ,这个ImageButton能够显示出来但显示的位置与xml中定义的不同。

测试类 testViewClass.java :


package com.yht.testViewClass;

import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.widget.RelativeLayout;

public class testViewClass extends Activity {
/** Called when the activity is first created. */
MyViewGroup mvg;
LayoutInflater layoutInflater;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);


mvg = new MyViewGroup(this);
this.setContentView(mvg);
layoutInflater = this.getLayoutInflater();
RelativeLayout view = (RelativeLayout) layoutInflater.inflate(R.layout.mute_box, null);
mvg.addView(view);

}
}



MyViewGroup.java


package com.yht.testViewClass;

import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.MeasureSpec;
import android.widget.LinearLayout;

public class MyViewGroup extends ViewGroup {

public MyViewGroup(Context context, AttributeSet attrs) {
super(context, attrs);

}

public MyViewGroup(Context context) {
super(context);

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

int count = this.getChildCount();

for(int i = 0;i < count;i++){
View child = this.getChildAt(i);
child.setVisibility(View.VISIBLE);
child.measure(r-l, b-t);
int x = l;
int y = t;
//心中疑惑:我认为我只要在这里调用child的layout(int,int,int,int)方法给出它的位置和宽高就可以了
//如果child本身是一个ViewGroup的话它是否应该自己去管理它本身内部的child的位置和宽度呢???
child.layout(x,y,x + getWidth(),y + getHeight());
}
}

}


相对布局的xml文件 mute_box.xml:


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:background="@drawable/list_background">

<!--
Button 相对于Parent 垂直靠右显示
-->
<Button
android:id="@+id/image_button_2"
android:text="TEST BUTTON"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5px"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
/>



</RelativeLayout>


...全文
1022 点赞 收藏 7
写回复
7 条回复

还没有回复,快来抢沙发~

发动态
发帖子
Android
创建于2009-10-09

4.6w+

社区成员

9.0w+

社区内容

移动平台 Android
社区公告
暂无公告