坑爹的android:Layout_weight属性

PepsiZero 发布于 2012/12/03 15:13
阅读 9K+
收藏 7

今天调整界面的时候遇到了一个需求,在一个fill_parent的水平的LinearLayout中有两个RelativeLayout,这两个RelativeLayout之间的宽度要求为2:3,我第一时间的反应就是使用android:Layout_weight属性,第一个设置为2,第二个设置为3,结果坑爹的反过来了。于是我不信邪的把android:Layout_weight的值反了一下,结果oK。靠,虽然问题解决但是让我很蛋疼的是这和我的理解相反。本着“科研”的精神,我自己动手做了如下的实验,一个LinearLayout中放了了两个TextView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_weight="1"
        android:layout_height="50dip"
        android:background="#ffff0000"
        android:text="TextView1" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_weight="2"
        android:layout_height="50dip"
        android:background="#ff00ff00"
        android:text="TextView2" />

</LinearLayout>
结果:



然后xml做一点修改:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_weight="1"
        android:layout_height="50dip"
        android:background="#ffff0000"
        android:text="TextView1" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="match_parent"
        android:layout_weight="2"
        android:layout_height="50dip"
        android:background="#ff00ff00"
        android:text="TextView2" />

</LinearLayout>
结果:


从上面两个结果可以看出当LinearLayout的子控件具备android:layout_weight属性时,结果的表现会因为子控件的android:layout_width属性是match_parent或者wrap_content而出现截然不同的结果:

match_parent时,android:layout_weight越小,占的空间越大;fill_parent则相反。

但是这里有一点比较奇怪的是android:layout_width="match_parent"时两个控件的比例和设置的一致,但是android:layout_width="wrap_content"时两个控件的比例就不是设置的比例了,这个有人知道是为什么吗??

加载中
0
fneg
fneg
官方推荐是设置了layout_weight以后就设置 android:layout_width="0dp"
PepsiZero
PepsiZero
回复 @铂金小猫 : 说到心坎里去了
loki_lan
loki_lan
回复 @soso_fy : 现在做安卓的,在2.3+与4.0+过渡的尴尬阶段,不容易啊。
PepsiZero
PepsiZero
回复 @铂金小猫 :估计的我的adt版本低,这个没提示过
loki_lan
loki_lan
而且官方的解释是,设置成0dip会提高性能。
loki_lan
loki_lan
回复 @soso_fy : 一般你在xml文件写weight这个属性时都会有警告要你把width设置成0dip的。
下一页
0
Capation
Capation
一楼正解!
0
canx
canx
好   了解
0
l
loom
layout_weight表示按何种比例分配剩于空间,楼主理解有偏差
PepsiZero
PepsiZero
嗯,现在使用layout_weight的地方都设置layout_width为0dip了
返回顶部
顶部