刚学android布局,对layout_weight布局一直不是很理解,网上到处找资料,也觉得没有真正讲明白,有些文章都是作者自己测试得出来的一些经验,虽然有用,但是还是不明白里面的原理。今天我想仔细讲讲这个,给初学android的人一点指点。
首先,我们来看个例子,布局XML是:
<RadioGroup android:id="@+id/favorite_rg" android:layout_width="fill_parent" android:layout_height="50dip" android:orientation="horizontal"> <RadioButton android:id="@+id/favorite_article_rb" android:layout_width="0dp" android:layout_height="50dip" android:layout_weight="1" android:text="宝典" android:textSize="20dip" android:button="@null" android:gravity="center" android:textColor="@color/good_detail_radiobutton_text" android:background="@drawable/good_detail_rb" /> <RadioButton android:id="@+id/favorite_good_rb" android:layout_width="0dp" android:layout_height="50dip" android:layout_weight="1" android:text="产品" android:textSize="20dip" android:button="@null" android:gravity="center" android:textColor="@color/good_detail_radiobutton_text" android:background="@drawable/good_detail_rb" /> </RadioGroup>
显示效果是这样的:
2个按钮平均分配了。 那android是怎么给按钮分配的空间呢? 我们发现RadioButton组件里面有部分属性都是layout_*打头的,这些属性其实就是告诉它的父组件RadioGroup应该怎么布局子组件,当父组件的android:orientation=”horizontal”水平布局的时候,父组件会先按照子组件的layout_width分配对应的空间,剩下的宽度(父组件的宽度减掉2个RadioButton的layout_width)再按子组件的layout_weight分配,因为2个RadioButton的layout_weight=1,所以分别将剩余的空间按1/2, 1/2瓜分。如果2个RadioButton的layout_width之和超过了父组件的width,那么就会有问题,这种情况在此不作讨论,因为真正做软件时这种情况是错误的。
结论:很多情况下我们仅仅想让子元素按照layout_weight设置的比例分配空间,那么这就需要你把layout_width设置成0。 如果父组件是android:orientation=”vertical”,那子组件将layout_height设置成0即可。