zoukankan      html  css  js  c++  java
  • layout_weight 的解释及使用

    layout_weight 的解释及使用

    转自:http://my.oschina.net/jsan/blog/191492

    在Android的控件布局中,有一个奇葩的 layout_weight 属性,定义如下:

    layout_weight : 用于指定剩余空闲空间的分割比例。用法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <LinearLayout
      android:orientation="horizontal">
     
      <TextView
          android:layout_width="wrap_content"
          android:layout_height="wrap_height"
          android:layout_weight="1"
          android:text="888"/>
     
      <TextView
          android:layout_width="wrap_content"
          android:layout_height="wrap_height"
          android:layout_weight="1"
          android:text="999999"/>
     
    </LinearLayout>

    为什么说是奇葩呢?

    以上面的布局代码为例,TextView-888 和 TextView-999999 是横向排列的2个控件,它们的layout_weight="1",说明这2个控件平分了所在LinearLayout的剩余的空闲空间, 我们很容易的就误认为这2个控件平分了水平方向的空间,即:各自占据了 50% 的宽度。

    其实这是错误的,而是:TextView-999999控件所占据的宽度 > TextView-888所占据的宽度。因为999999字符占据的宽度大于888占据的宽度,即:w(999999) + 1/2空闲空间 > w(888) + 1/2空闲空间

    这就是它奇葩的地方,很容易就让我们一直误认为是整个控件分割空间。到这里,大家一定会认为,这样的话,layout_weight 这个属性就没有什么意义了,原以为它可以分配空间呢,原来只是分割剩余空闲空间

    其实,呵呵,layout_weight 是可以用来进行整个空间的分割的,如果我们让控件的宽度(注:当orientation="horizental"时是layout_width="0dp",当orientation="vertical"时必须是layout_height="0dp"。此时分配给组件的空间大小与layout_weight的值的大小成正比。)定义为0,这样比如2个控件的 layout_weight="1" 就可以各自50%平分整个空间了,因为:0 + 1/2空闲空间 = 0 + 1/2空闲空间

    这是一个小技巧,也是非常实用的一个实用layout_weight分割方案:定义控件的 layout_width="0dp" 或 layout_height="0dp" 配上 layout_weight 就可以实现对整个空间的比例分割了。

    下面定义了2个控件的 layout_width="0dp", layout_weight="1",实现了水平方向50%平均分割:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <LinearLayout
      android:orientation="horizontal">
     
      <TextView
          android:layout_width="0dp"
          android:layout_height="wrap_height"
          android:layout_weight="1"
          android:text="888"/>
     
      <TextView
          android:layout_width="0dp"
          android:layout_height="wrap_height"
          android:layout_weight="1"
          android:text="999999"/>
     
    </LinearLayout>

    下面定义了2个控件的 layout_height="0dp", layout_weight="1",实现了竖直方向50%平均分割:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <LinearLayout
      android:orientation="vertical">
     
      <TextView
          android:layout_width="wrap_content"
          android:layout_height="0dp"
          android:layout_weight="1"
          android:text="888"/>
     
      <TextView
          android:layout_width="wrap_content"
          android:layout_height="0dp"
          android:layout_weight="1"
          android:text="999999"/>
     
    </LinearLayout>

     

    使用Layout_weight时空间分配的计算方法:http://mobile.51cto.com/abased-375428.htm

  • 相关阅读:
    Python之文件操作
    document.hasFocus() & $(window).blur()
    innerHtml 会忽略里面元素的属性
    ng  命令集合
    阿里云ECS CentOs7.3下搭建LAMP环境(Apache2.4 + Mysql5.7 + PHP5.6 + Laravel5.2)
    在忘记root密码的时候,可以这样 亲测可用
    下一次装mysql 试一下这个方法
    CentOS-6.8安装Mysql-5.5.29
    阿里云服务器下安装LAMP环境(CentOS Linux 6.3)
    CentOS 7.2 配置Apache服务(httpd)--上篇
  • 原文地址:https://www.cnblogs.com/cheneasternsun/p/5390976.html
Copyright © 2011-2022 走看看