Layout Weight
layout_weight是安卓线性布局Linear Layout中的一个很常用比较很好用的属性,这个属性通过权重来控制控件的大小分配,在很多地方非常实用
下面举几个例子来说明一下。
第一个列子中 message的大小如果按照正常的情况来说很不好定义,如果定义为fillparent,那么send按钮就会被挤出去。如果用具体的数值或者用wrap_contentd的话,对于不同屏幕大小的手机或者对于不同的message大小,显示的效果不一样,不利于统一界面,影响美观度。
这个时候,将message部分的控件高度设置为0dip,加上权重weight为1 就可以很好的解决这个问题 在所有的手机上面都会如上图所示的布局来显示
<?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"
android:paddingLeft="16dp"
android:paddingRight="16dp" >
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/to" />
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/subject" />
<EditText
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="top"
android:hint="@string/message" />
<Button
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="@string/send" />
</LinearLayout>
第二个例子中 需求是三个按钮很平均的分布在同一行,这种情况,使用具体的宽度值显然是很不合适的,对于不同大小屏幕的手机来说,显示效果会出现很大的不同,使用wrap_content显然也不合适,不同按钮的长度可能出现不一样的情况,无法满足需求,这个时候,使用weight属性,就可以很高的解决这个问题,将每个按钮button的宽度权重设为1,表示,每个按钮的权重相同,将宽度均分到每一个按钮身上,这样就可以很好的解决屏幕失配的问题。
同理:进行固定比例的分配都可以用weight来进行处理
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:layout_marginTop="30dip"
>
<Button
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="按钮1"
/>
<Button
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="按钮2"
/>
<Button
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="按钮3"
/>
</LinearLayout>