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

本篇介绍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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值