ViewGroup自定义布局(左上右下)
2015-09-19 19:19
274 查看
布局文件
<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="com.test.myviewgroup.MainActivity" > <com.test.myviewgroup.MyViewGroup android:layout_height="match_parent" android:layout_width="match_parent"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="吭吭" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="咳咳" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="吭吭" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="咳咳" /> </com.test.myviewgroup.MyViewGroup> </RelativeLayout>
继承自ViewGroup的类
package com.test.myviewgroup; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; public class MyViewGroup extends ViewGroup{ private int width; private int height; public MyViewGroup(Context context, AttributeSet attrs) { super(context, attrs); } public MyViewGroup(Context context) { super(context); } @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(child1.getMeasuredWidth(),child1.getMeasuredHeight(), child1.getMeasuredWidth()+child2.getMeasuredWidth(), child1.getMeasuredHeight()+child2.getMeasuredHeight()); } if(child3!=null){ child3.layout(child1.getMeasuredWidth()+child2.getMeasuredWidth(), child1.getMeasuredHeight()+child2.getMeasuredHeight(), child3.getMeasuredWidth()+child1.getMeasuredWidth()+child2.getMeasuredWidth(), child3.getMeasuredHeight()+child1.getMeasuredHeight()+child2.getMeasuredHeight()); } if(child4!=null){ child4.layout(child3.getMeasuredWidth()+child1.getMeasuredWidth()+child2.getMeasuredWidth(),child3.getMeasuredHeight()+child1.getMeasuredHeight()+child2.getMeasuredHeight(), child3.getMeasuredWidth()+child1.getMeasuredWidth()+child2.getMeasuredWidth()+child4.getMeasuredWidth(), child4.getMeasuredHeight()+child3.getMeasuredHeight()+child1.getMeasuredHeight()+child2.getMeasuredHeight()); } // int left=0; // int top=0; // for(int i=0;i<getChildCount();i++){ // View child=getChildAt(i); // child.layout(left, top,child.getMeasuredWidth(), child.getMeasuredHeight()); // } } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // TODO Auto-generated method stub super.onMeasure(widthMeasureSpec, heightMeasureSpec); width=getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec); height=getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec); measureChildren(width, height); } }
主类
package com.test.myviewgroup; import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
效果图
相关文章推荐
- HDOJ5455 Fang Fang(模拟)
- oci.dll PLSQL连接oracel
- 判断一个数是否为素数
- 软件测试方法分类
- nyoj 349 Sorting It All Out(拓扑排序度的理解)
- hdu 5433 Xiao Ming climbing
- Tomcat详细用法学习(三)
- 重试中的指数退避算法
- 2562:奇偶位互换
- 来到惠普的感受
- iOS集成支付宝
- Java基础知识强化36:StringBuffer类之StringBuffer的概述
- MarkDown的使用技巧
- Writing your first academic paper
- bloom filter与Cuckoo Filter
- 【Android小游戏】安卓小游戏开发(直播手把手教学系列一)
- JQuery中$.ajax()方法各参数详解(总结):
- 一个用NetBeans写的计算器
- canvas的translate、scale、rotate、clipRect等方法
- 天猫超市先攻北京市场 传统商超们还如何淡定