android:layout_width="0.0dip",TabHost和android:layout_height=\"0.0dip\"的使用 -芸锺鹤-ChinaUnix博客...

摘自: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” ,布局文件如下:

点击(此处)折叠或打开

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

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"

/>

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"/>

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"/>

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"/>

效果图如下:

7c2a54df7704b796143b44859cf3bbc0.png

效果是1:2:3:4

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

点击(此处)折叠或打开

01.<?xml version="1.0"encoding="utf-8"?>

02.

03.android:layout_width="fill_parent"

04. android:layout_height="fill_parent"

05.android:orientation="vertical" >

06.

07.

08.android:id="@+id/sample_1"

09.android:layout_width="fill_parent"

10.android:layout_height="0.0dip"

11.android:layout_weight="1"

12.android:textSize="@dimen/text_size_big"

13.android:background="@color/red"

14.android:text="@string/text1"

15.android:gravity="center"/>

17.

18.    

19.android:id="@+id/sample_2"

20.android:layout_width="fill_parent"

21.android:layout_height="wrap_content"

22.android:layout_weight="2"

23.android:textSize="@dimen/text_size_big"

24.android:background="@color/black"

25.android:text="@string/text2"

26.android:gravity="center" />

28.

29.

30.android:id="@+id/sample_3"

31.android:layout_width="fill_parent"

32.android:layout_height="wrap_content"

33.android:textSize="@dimen/text_size_big"

34.android:layout_weight="3"

35.android:background="@color/white"

36.android:text="@string/text3"

37.android:gravity="center" />

39.

40.

41.android:id="@+id/sample_4"

42.android:layout_width="fill_parent"

43.android:layout_height="0.0dip"

44.android:textSize="@dimen/text_size_big"

45.android:layout_weight="4"

46.android:background="@color/blue"

47.android:text="@string/text4"

48.android:gravity="center"/>

49.

50.

效果图:

c7f69404d6598fed87643aa9e8ae22e9.png

效果不是1:2:3:4,第一个明显小很多;

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

点击(此处)折叠或打开

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

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"/>

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"/>

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"/>

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"/>

效果图:

7b6b896420053b034be70d235228ffe8.png

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

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

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

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

3912a66b88e181aa20b09b5089bfff11.png

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

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

afd836e4cf3b976247dd1cc1a10fc2a2.png

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

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

27c205a12e1b763b5a31c6a659214c18.png

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

以下内容摘自:http://blog.sina.com.cn/s/blog_694448320101inso.html

android:id=”@android:id/tabcontent”

android:layout_width=”fill_parent”

android:layout_height=”0.0dip”

android:layout_weight=”1.0″>

一旦设置android:layout_weight=”1.0″后,假设布局为垂直方向。则android:layout_height即使设置了也不起作用。因为android:layout_weight=”1.0″属性,会充满中间的区域!应该改为:android:layout_height=”0.0dip”

总结:当设置了比重属性后,在这个方向上的长度就不确定了,不需要再去适配任何属性了,设置了也白设!因为控件都是绘制到屏幕上的,它会根据布局文件初始化控件在屏幕上的显示,所以设置0dip就相当于初始化时不需要绘制了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值