TabHost和android:layout_height="0.0dip"以及android:layout_weight配合在布局中的使用

转载 2013年12月04日 12:22:58

转载地址:http://www.cnblogs.com/zb-xxzjjcbx/archive/2013/01/05/2845641.html

最近在搞UI部分,对布局有了一定的认识(仅限于各人的理解)欢迎来拍砖。

首先对android:layout_height="0.0dip"的属性很是迷惑,在网上找了一大堆的东西,其实也并没有说出来一个所以然来。找了很多文章发现一个规律就是:当android:layout_height="0.0dip"时一般都是和android:layout_weight结合来使用的,来控制子控件在父控件中所占用的比例(水平和竖直方向:水平方向是android:layout_weight和android:layout_width="0.0dip"相互结合使用的;垂直方向是android:layout_weight和android:layout_height="0.0dip"相互结合使用的;此时android:layout_weight的值越大,占的比例就越大。这时的“0.0dip”其实也不能用“wrap_content”来替代的(我原来以为可以),此时子控件比例会发生小的变化。如果有3个以上的子控件用了上面的方案,假设是竖直方向成比例,如果此时把中间的一个子控件的android:layout_height="0.0dip"改为“fill_parent”,那么原有的比例设置就会彻底失效,一眼就能看出来。如果全部改为“fill_parent”,那么android:layout_width的值越小占的比例就越大。所以,一句话总结:要想使子控件成比例,在竖直方向:用android:layout_height="0.0dip"和android:layout_weight;在水平方向:用用android:layout_width="0.0dip"和android:layout_weight;此时android:layout_weight越大在相应方向占的比例就越大)。下面来结合代码和图片来说明。

1、在竖直方向有4个TextView,分别是红、黑、白、蓝四种颜色,所占比例一次是:1:2:3:4,子控件高度全是“0.0dip” ,布局文件如下:

<?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="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/sample_1"
        android:layout_width="fill_parent"
        android:layout_height="0.0dip"
        android:layout_weight="1"
        android:textSize="@dimen/text_size_big"
        android:background="@color/red"
        android:text="@string/text1"
        android:gravity="center"
         />

    <TextView
        android:id="@+id/sample_2"
        android:layout_width="fill_parent"
        android:layout_height="0.0dip"
        android:layout_weight="2"
        android:textSize="@dimen/text_size_big"
        android:background="@color/black"
        android:text="@string/text2"
        android:gravity="center"
         />

    <TextView
        android:id="@+id/sample_3"
        android:layout_width="fill_parent"
        android:layout_height="0.0dip"
        android:textSize="@dimen/text_size_big"
        android:layout_weight="3"
        android:background="@color/white"
        android:text="@string/text3"
        android:gravity="center"
         />

    <TextView
        android:id="@+id/sample_4"
        android:layout_width="fill_parent"
        android:layout_height="0.0dip"
        android:textSize="@dimen/text_size_big"
        android:layout_weight="4"
        android:background="@color/blue"
        android:text="@string/text4"
        android:gravity="center" />

</LinearLayout>

效果图如下:


效果是1:2:3:4 

2、如果把4个TextView中的两个的高度由“0.dip”改为“wrap_content”,代码和效果如下:

<?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="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/sample_1"
        android:layout_width="fill_parent"
        android:layout_height="0.0dip"
        android:layout_weight="1"
        android:textSize="@dimen/text_size_big"
        android:background="@color/red"
        android:text="@string/text1"
        android:gravity="center"
         />

    <TextView
        android:id="@+id/sample_2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:textSize="@dimen/text_size_big"
        android:background="@color/black"
        android:text="@string/text2"
        android:gravity="center"
         />

    <TextView
        android:id="@+id/sample_3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="@dimen/text_size_big"
        android:layout_weight="3"
        android:background="@color/white"
        android:text="@string/text3"
        android:gravity="center"
         />

    <TextView
        android:id="@+id/sample_4"
        android:layout_width="fill_parent"
        android:layout_height="0.0dip"
        android:textSize="@dimen/text_size_big"
        android:layout_weight="4"
        android:background="@color/blue"
        android:text="@string/text4"
        android:gravity="center" />

</LinearLayout>

效果图:


全部改为“wrap_content”后的代码和效果图:

<?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="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/sample_1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:textSize="@dimen/text_size_big"
        android:background="@color/red"
        android:text="@string/text1"
        android:gravity="center"
         />

    <TextView
        android:id="@+id/sample_2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:textSize="@dimen/text_size_big"
        android:background="@color/black"
        android:text="@string/text2"
        android:gravity="center"
         />

    <TextView
        android:id="@+id/sample_3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="@dimen/text_size_big"
        android:layout_weight="3"
        android:background="@color/white"
        android:text="@string/text3"
        android:gravity="center"
         />

    <TextView
        android:id="@+id/sample_4"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="@dimen/text_size_big"
        android:layout_weight="4"
        android:background="@color/blue"
        android:text="@string/text4"
        android:gravity="center" />

</LinearLayout>

效果图:


全部改为“wrap_content”后,比例并不是原来的1:2:3:4了,从上图就可以看出来; 

 

 

全部是“0.0dip”和其中两个TextView是"wrap_content"的图片的对比:

两个是“wrap_content”和全不是“wrap_content”的对比:

 

如果把第二个TextView就是黑色的那个的高度改为改为“fill_parent”,其它的还是"wrap_content"效果如下:

当黑色的改为“fill_parent”后, 因为第一个红色wrap_content,先给它分配,然后第二个黑色会把剩余空间的全部占用,就显示不出来3和4了;

 

第三个就是白色那个改为fill_parent其他都是wrap_content

同理,如果白色为“fill_parent”,会先给1和2就是红色和黑色分配,然后剩余的空间白色会全部占用;

第3个也就是白色的TextView高度改为"fill_parent",其它的TextView高度改为“0.0dip”效果如下:

这个时候,屏幕就全为白色的了。

 

Android 对Layout_weight属性完全解析以及使用ListView来实现表格

今天主要说的是对Layout_weight属性的完全解析,以及利用Layout_weight这个属性使用ListView来实现表格的效果,我们都知道Android里面专门有一个TableLayout来...
  • xiaanming
  • xiaanming
  • 2013年10月31日 22:40
  • 33017

在android布局中使用layout_weight的几点技巧和说明layout_weight

android应用中的layout_weight的使用技巧
  • yeah0126
  • yeah0126
  • 2015年09月25日 18:44
  • 2023

安卓开发技巧一:深入理解Android布局中Layout_weight的属性

今天开始将要为大家介绍一些安卓开发过程将要用到的一些技巧,这些技巧全部来自网络搜集,或者自己在企业做项目的时候总结出来的,利用这些技巧将会对我们开发带来非常方便的便捷性。 先来记录一下这一段时间的技巧...
  • u011131296
  • u011131296
  • 2014年12月08日 13:58
  • 1725

Android百分比布局之layout_weight属性

在Android中对控件布局指定尺寸时,一般有两种方式:一种设定为自适应布局,即match_parent(fill_parent)或者wrap_content,通过根据父布局大小或者自己内容来产生一个...
  • wangdejun
  • wangdejun
  • 2015年01月15日 13:16
  • 5835

LinearLayout布局中Layout_weight的深刻理解-为何需设置android:layout_width="0dp"

原文:http://blog.csdn.net/chy800/article/details/46397927 Android:LinearLayout布局中Layout_weight的深刻...
  • akiyame
  • akiyame
  • 2016年03月11日 20:12
  • 6509

Android之TabHost布局 两种方式

Android布局之TabHost 中的两种实现方式,一种是继承TabActivity,从TabActivity中用getTabHost()方法获取TabHost。另一种是不继承TabActivity...
  • u013184970
  • u013184970
  • 2015年09月09日 16:03
  • 1224

android:layout_weight的真实含义

首先声明只有在Linearlayout中,该属性才有效。之所以android:layout_weight会引起争议,是因为在设置该属性的同时,设置android:layout_width为wrap_c...
  • yanzi1225627
  • yanzi1225627
  • 2014年04月28日 21:02
  • 109804

关于Android UI组件LinearLayout属性layout_weight与layout_width/height的问题

原文地址:http://hi.baidu.com/wei_chou/item/04b51be1abb1e316595dd853 在网上搜索了很多关于layout_weight的文章,众说纷纭...
  • chenzhiqin20
  • chenzhiqin20
  • 2013年09月02日 14:19
  • 2209

Android layout_width和layout_weight关系

我们以实际的一个一个的小demo来说明问题demo01demo02demo03总结:FR:徐海涛(Hunk Xu)...
  • qq_15267341
  • qq_15267341
  • 2016年09月19日 21:42
  • 1099

【移动开发】按比例布局layout_weight和weightSum

混合使用weightSum和layout_weight 先看效果,button占据屏幕宽度的一半。 再看开发文档中的描述。 “定义weight总和的最大值。如果未指定该值,以所有子视图的layout...
  • manoel
  • manoel
  • 2014年09月01日 01:31
  • 15153
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TabHost和android:layout_height="0.0dip"以及android:layout_weight配合在布局中的使用
举报原因:
原因补充:

(最多只允许输入30个字)