Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 680|回复: 0

Q&A: 自定义ViewGroup中不能正确显示 子viewGroup

[复制链接]

该用户从未签到

发表于 2011-10-22 17:36:57 | 显示全部楼层 |阅读模式
问题描述:

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

测试类 testViewClass.java

Java code
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

Java code
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 code
<?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>
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-9 21:30 , Processed in 0.348609 second(s), 36 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表