菜鸟学android(1)线性布局与相对布局

来源:互联网 发布:伊斯兰教邪教知乎 编辑:程序博客网 时间:2024/06/06 03:31

本篇介绍android的线性布局(LinearLayout)和相对布局(RelativeLayout),

  1. < LinearLayout> < /LinearLayout>
  2. < RelativeLayout> < /RelativeLayoutLayout>

1.<LinearLayout> 线性布局

特点:控件紧密依次排列 呈线性水平或者垂直分布 简单易懂属性少 在下用的最多的界面布局 weight属性做出来的自适应布局百试不爽~
xml属性:

android:orientation="vertical"垂直分布android:orientation="horizontal"水平分布android:gravity="xxx" 表示子控件在布局中放在什么位置中间可加 | 同时选择两种属性 如android:gravity="center_horizontal|top" 表示在顶部居中设置方法 : setGravity(int); android:weightSum="xxx" 内部填数值表示比重和是多少(可以不写)与之相对的属性是:android:layout_weight="xxx"内部数字表示自身占父控件多少比重 如:父控件 weightSum ="1",自身layout_weight = "0.5",则占一半。android:baselineAligned="xxx" 设置布局控件中子控件内的文字的基线是否对齐。默认是true如当:orientation设置为horizontal时 几个控件上的文字下边缘是对齐的设置方法:setBaselineAligned(boolean b); android:baselineAlignedChildIndex="xxx"设置文字基线对齐的子控件 填入数字表示是该布局下的第几个子控件 记得是从0开始!!!android:divider="xxx" 用于在子控件之间添加分割线 填入的东西一般为引用。如@drawable设置方法 : setDividerDrawable(Drawable); android:showDividers="xxx"显示分割线android:measureWithLargestChild = "xxx"默认是false 设置为true时,该布局中所有带权重属性的控件的高与高度最高的控件相同(垂直时),宽与宽度最宽的控件相同(水平时) 注意在线性布局中 宽高要设置成wrap_content设置方法 : setMeasureWithLargestChildEnable(boolean b);

代码中常见的方法:

1.--------------------------------------------------获取LinearLayout宽高:View.getHeight(),View.getWidth() 注意:在组件外是无法获取宽高的组件外无法获取 : 调用View.getHeight() 和View.getWidth()方法是获取不到组件的宽度和高度的,因为在onCreate()时LinearLayout还没有绘制完成,所以这两个方法返回的是0, Android的运行机制决定了无法在组件外部使用getHeight()和getWidth()方法获取宽度和高度;组件内可以获取 : 在自定义的类中可以在View的类中通过调用这两个方法获取该View子类组件的宽和高;此外也可以使用View view = getLayoutInflater().inflate(R.layout.main, null);  LinearLayout linearlayout = (LinearLayout)view.findViewById(R.id.linearlayout);  //measure方法的参数值都设为0即可  linearlayout.measure(0,0);  //必须先调用view.measure()//获取组件宽度  int width = linearlayout.getMeasuredWidth();  //获取组件高度  int height = linearlayout.getMeasuredHeight();  2.------------------------------------------------获取组件的宽高1. 使用view.measure()与上述方法一样int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);//宽int h = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);//高//关于MeasureSpec的内容看下方链接-1-view.measure(w,h);view.getMeasuredWidth();//获取宽view.getMeasuredHeight();//获取高2. ViewTreeObserver viewTreeObserver;声明一个对象 然后可以注册下面两个回调函数(任选一个)//关于ViewTreeObserver 的内容看下方链接-2-(1)viewTreeObserver .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {         @Override//当一个视图树将要绘制时调用这个回调函数         public boolean onPreDraw() {             printLog("使用ViewTreeObserver 获取宽高:width:"             + textview1.getMeasuredWidth() + "---->height:"             + textview1.getMeasuredHeight());             + return true;          } });2)vtb1.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {            @Override//当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时调用这个回调函数。            public void onGlobalLayout() {                textview1.getViewTreeObserver().addOnGlobalLayoutListener(this);                printLog("使用OnGlobalLayoutListener 获取宽高:width:"                        + textview1.getWidth() + "---->height:"                        + textview1.getHeight());            }        });3.--------------------------------------------------------------设置控件的宽高1、获取控件所在的布局LayoutParams param = button.getLayoutParams();//获取按钮的布局2、修改布局中的height,width属性param.width=200;//修改宽度param.height=300;//修改高度3、重新设置修改后的布局给控件button.setLayoutParams(param); //设置修改后的布局。//对于LayoutParams的内容介绍见链接-3-

链接:
-1-对于MeasureSpec的内容介绍
-2-对于ViewTreeObserver 的内容介绍
-3-对于LayoutParams的内容介绍

2. <RelativeLayout> 相对布局

特点:通过对子控件的属性控制来决定子控件位于父控件的位置 我用的第二多的布局格式
xml 常用属性:

第一类:属性值为truefalse    android:layout_centerHrizontal               水平居中    android:layout_centerVertical                垂直居中    android:layout_centerInparent                相对于父元素完全居中    android:layout_alignParentBottom             贴紧父元素的下边缘    android:layout_alignParentLeft               贴紧父元素的左边缘    android:layout_alignParentRight              贴紧父元素的右边缘    android:layout_alignParentTop                贴紧父元素的上边缘    android:layout_alignWithParentIfMissing      如果对应的兄弟元素找不到的话就以父元素做参照物    第二类:属性值必须为id的引用名“@id/id-name”    android:layout_below                         在某元素的下方    android:layout_above                         在某元素的的上方    android:layout_toLeftOf                      在某元素的左边    android:layout_toRightOf                     在某元素的右边    android:layout_alignTop                      本元素的上边缘和某元素的的上边缘对齐    android:layout_alignLeft                     本元素的左边缘和某元素的的左边缘对齐    android:layout_alignBottom                   本元素的下边缘和某元素的的下边缘对齐    android:layout_alignRight                    本元素的右边缘和某元素的的右边缘对齐    第三类:属性值为具体的像素值,如30dip,40px    android:layout_marginBottom                  离某元素底边缘的距离    android:layout_marginLeft                    离某元素左边缘的距离    android:layout_marginRight                   离某元素右边缘的距离    android:layout_marginTop                     离某元素上边缘的距离

在代码中的常用的方法:
与LinearLayout大同小异,这里就不继续赘述了。

0 0
原创粉丝点击