Android自定义ViewGroup
来源:互联网 发布:开源惯性导航算法 编辑:程序博客网 时间:2024/05/21 11:11
概述:
ViewGroup作为一个放置View的容器,并且我们在写布局xml的时候,会告诉容器(凡是以layout为开头的属性,都是为用于告诉容器的),我们的宽度(layout_width)、高度(layout_height)、对齐方式(layout_gravity)等;当然还有margin等;于是乎,ViewGroup需要做的事情是:给childView计算出建议的宽和高和测量模式 ;决定childView的位置;为什么只是建议的宽和高,而不是直接确定呢,别忘了childView宽和高可以设置为wrap_content,这样只有childView才能计算出自己的宽和高。
Demo:
新建一个类继承于ViewGroup
public class MyGroupView extends ViewGroup { private int width; private int height; public MyGroupView(Context context) { super(context); } public MyGroupView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); width = getDefaultSize(getSuggestedMinimumWidth(),widthMeasureSpec); height = getDefaultSize(getSuggestedMinimumHeight(),heightMeasureSpec); //确定子控件的位置以及尺寸 measureChildren(width,height); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { View child1 = getChildAt(0); View child2 = getChildAt(1); View child3 = getChildAt(2); View child4 = getChildAt(3); //确定每个子控件的位置 if(child1!=null){ child1.layout(0,0,child1.getMeasuredWidth(),child1.getMeasuredHeight()); } if(child2!=null){ child2.layout(r-child2.getMeasuredWidth(),0,r,child2.getMeasuredHeight()); } if(child3!=null){ child3.layout(0,b-child3.getMeasuredHeight(),child3.getMeasuredWidth(),b); } if(child4!=null){ child4.layout(r-child4.getMeasuredWidth(),b-child4.getMeasuredHeight(),r,b); } }}
在布局中调用自定义ViewGroup,并在里面插入几个Button类子控件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <com.example.administrator.selfishgroupview.my_groupview.MyGroupView android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="200dp" android:layout_height="200dp"/> <Button android:layout_width="100dp" android:layout_height="100dp"/> <Button android:layout_width="100dp" android:layout_height="100dp"/> <Button android:layout_width="200dp" android:layout_height="200dp"/> </com.example.administrator.selfishgroupview.my_groupview.MyGroupView></RelativeLayout>
演示结果:
0 0
- 【Android】Android自定义ViewGroup
- android之自定义ViewGroup
- Android中自定义ViewGroup
- android自定义View(viewGroup)
- Android中自定义ViewGroup
- Android 自定义ViewGroup
- Android 自定义ViewGroup
- Android 自定义viewgroup
- Android 自定义ViewGroup
- android--自定义ViewGroup
- Android中自定义ViewGroup
- Android 自定义ViewGroup (一)
- Android 自定义ViewGroup (二)
- Android中自定义ViewGroup
- Android自定义ViewGroup详解
- Android-自定义ViewGroup
- Android 自定义ViewGroup
- Android自定义ViewGroup
- Java关键字this、super使用总结
- 技术人生:故事之二十八不做“售前”,就无法明白软件
- 如何将EXCEL显示在页面上
- 多线程
- 技术人生:故事之二十九我们忙什么
- Android自定义ViewGroup
- netbeans做简易的计算器
- 找出矩阵中的最大矩形
- 负载均衡
- 关于MyEclipse项目改名后部署不成功,名字未变的问题
- NYOJ 69 数的长度 (log的使用)
- java异常
- ubuntu中jdk被系统jdk覆盖的问题
- 等价类方法