Android:Layout_weight的深刻理解(转)

本文详细介绍了Android布局中Layout_weight的属性,它是剩余空间的权重

首先看一下Layout_weight属性的作用:它是用来分配剩余空间的一个属性,你可以设置他的权重。很多人不知道剩余空间是个什么概念,下面我先来说说剩余空间。

1.初步理解

先看如下代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"         >
    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:text="one"/>
    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_weight="1.0"
        android:text="two"/>
    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:text="three"/>
</LinearLayout>   

运行结果是:

看上面代码:只有EditText2使用了Layout_weight属性,并赋值为了1,而EditText1和EditText3没有设置,根据API,可知,他们默认是0。

Layout_weight这个属性的真正的意思:

Android系统先按照你设置的3个EditText高度Layout_height值wrap_content,给你分配好他们3个的高度,

然后会把剩下来的屏幕空间全部赋给Button2,因为只有他的权重值是1,这也是为什么Button2占了那么大的一块空间。

现在我们就对Layout_weight属性有了一个初步的认识了,下面我们进一步了解。

2.进一步了解

先看下面代码:

 <?xml version="1.0" encoding="UTF-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal" >
     <TextView
         android:background="#ff0000"
         android:layout_width="**"
         android:layout_height="wrap_content"
         android:text="1"
         android:textColor="@android:color/white"
         android:layout_weight="1"/>
     <TextView
         android:background="#cccccc"
         android:layout_width="**"
         android:layout_height="wrap_content"
         android:text="2"
         android:textColor="@android:color/black"
         android:layout_weight="2" />
     <TextView
         android:background="#ddaacc"
         android:layout_width="**"
         android:layout_height="wrap_content"
         android:text="3"
         android:textColor="@android:color/black"
         android:layout_weight="3" />
 </LinearLayout> 

(1)当三个TextView都 layout_width=“wrap_content ”且Layout_weight分别为1,2,3时,会得到以下效果:

(是剩余空间1:2:3)

按照上面的理解,系统先给3个TextView分配他们的宽度值wrap_content(宽度足以包含他们的内容1,2,3即可),然后会把剩下来的空间按照1:2:3的比列分配给3个textview,所以就出现了上面的图像。

(2)当三个TextView都layout_width=fill_parent且Layout_weight分别为1,2,2时,会得到以下效果:

你会发现1的权重小,反而分的多了,这是为什么呢???依照上面理解我们来分析:

系统先给3个textview分配他们所要的宽度fill_parent,就是屏幕的宽度

那么    剩余空间RA=1个parent_width-3个parent_width=-2个parent_width (parent_width指的是屏幕宽度 )

那么    第一个TextView的实际宽度=parent_width + 1/5 *(-2 parent_width)=3/5parent_width

同理    第二个TextView的实际宽度=parent_width + 2/5*  (-2parent_width)   =1/5parent_width;

第三个TextView的实际宽度=parent_width + 2/5*  (-2parent_width)   =1/5parent_width;

所以就是3:1:1的比列显示了。

(3)当三个TextView都layout_width=fill_parent且Layout_weight分别为1,2,3时,会得到以下效果:

第三个直接不显示了,为什么呢?一起来按上面方法算一下吧:

剩余空间=parent_width-3*parent_width=-2个parent_width

第一个TextView的实际宽度=parent_width +1/6*(-2parent_width)=2/3parent_width;

第二个TextView的实际宽度=parent_width +2/6*(-2parent_width)=1/3parent_width;

第三个TextView的实际宽度=parent_width +3/6*(-2parent_width)=0parent_width;

所以就是2:1:0的比列显示了。第三个就直接没有空间了。

转自:http://mobile.51cto.com/abased-375428.htm

时间: 2024-11-05 23:19:52

Android:Layout_weight的深刻理解(转)的相关文章

Android:Layout_weight的深刻理解

最近写Demo,突然发现了Layout_weight这个属性,发现网上有很多关于这个属性的有意思的讨论,可是找了好多资料都没有找到一个能够说的清楚的,于是自己结合网上资料研究了一下,终于迎刃而解,写出来和大家分享. 首先看一下Layout_weight属性的作用:它是用来分配属于空间的一个属性,你可以设置他的权重.很多人不知道剩余空间是个什么概念,下面我先来说说剩余空间. 看下面代码: <?xml version="1.0" encoding="utf-8"?

转载:Android:Layout_weight的深刻理解

本文转自:http://blog.csdn.net/xiechengfa/article/details/38334327 近写Demo,突然发现了Layout_weight这个属性,发现网上有很多关于这个属性的有意思的讨论,可是找了好多资料都没有找到一个能够说的清楚的,于是自己结合网上资料研究了一下,终于迎刃而解,写出来和大家分享. 首先看一下Layout_weight属性的作用:它是用来分配属于空间的一个属性,你可以设置他的权重.很多人不知道剩余空间是个什么概念,下面我先来说说剩余空间. 看

[转]Android:Layout_weight的深刻理解

最近写Demo,突然发现了Layout_weight这个属性,发现网上有很多关于这个属性的有意思的讨论,可是找了好多资料都没有找到一个能够说的清楚的,于是自己结合网上资料研究了一下,终于迎刃而解,写出来和大家分享. 首先看一下Layout_weight属性的作用:它是用来分配属于空间的一个属性,你可以设置他的权重.很多人不知道剩余空间是个什么概念,下面我先来说说剩余空间. 看下面代码: <?xml version="1.0" encoding="utf-8"?

Android:LinearLayout布局中Layout_weight的深刻理解

首先看一下LinearLayout布局中Layout_weight属性的作用:它是用来分配属于空间的一个属性,你可以设置他的权重.很多人不知道剩余空间是个什么概念,下面我先来说说剩余空间. 看下面代码: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" an

android layout_weight 理解

本文详细介绍了Android布局中Layout_weight的属性,它是用来分配属于空间的一个属性,你可以设置他的权重. AD:2014WOT全球软件技术峰会北京站 课程视频发布 最近写Demo,突然发现了Layout_weight这个属性,发现网上有很多关于这个属性的有意思的讨论,可是找了好多资料都没有找到一个能够说的清楚的,于是自己结合网上资料研究了一下,终于迎刃而解,写出来和大家分享. 首先看一下Layout_weight属性的作用:它是用来分配属于空间的一个属性,你可以设置他的权重.很多

Android中layout_weight的属性理解

https://www.zybuluo.com/zzudhj/note/102067 在Android开发过程中,在编写布局文件经常会用layout_weight属性:从字面意思上看权重.比值.按比例... 通过例子来看看layout_weight的用法 example1:  该布局有三部分组成,title.edit.bottom,其中,为了满足edit可以填充父窗口,可以为EditText添加layou_weight属性.通过Dump view UI hierarchy for Automat

android:layout_weight属性的使用方法总结

原创文章,转载请注明出处http://www.cnblogs.com/baipengzhan/p/6282826.html android:layout_weight属性可以和其他属性配合使用,产生多种效果,但如果我们不清楚各种配合的使用,也容易产生一些 意想不到的结果,今天我们就认真的总结一下android:layout_weight属性的各种用法和产生的效果,方便今后直接拿来使用. 首先声明一句,我们一般只在LinearLayout中使用该属性,以下各种情况都是在LinearLayout中产

Android UI之android:layout_weight属性以及控件的比例控制

这两天在做一个Android界面的时候采用了linearlayout线性布局,并在其中放置了textview控件,设置android:layout_width属性为wrap_content时,eclipse提示说这里使用0dp取代wrap_content能获得更好的体验,顿时产生了好奇,为什么使用0dp会更好?于是探究了一番,网上已有相关的文章,学习之后作了一个总结. 首先解释一下Android:layout_weight属性的作用,其实简单理解就是用来分配空间大小,至于怎么分配,分配的是哪些空

Android 带你彻底理解 Window 和 WindowManager

有时候我们需要在桌面上显示一个类似悬浮窗的东西,这种效果就需要用 Window 来实现,Window 是一个抽象类,表示一个窗口,它的具体实现类是 PhoneWindow,实现位于 WindowManagerService 中.相信看到 WindowManagerService 你会有点眼熟,刚接触 Android 时几乎所有人都看到过这样一张图: WindowManagerService WindowManagerService 就是位于 Framework 层的窗口管理服务,它的职责就是管理