在不同的物理屏幕下,可以自由设置某控件占有屏幕宽度的大小,方法如下:
使输入框的宽度与屏幕宽度对应
现在的布局被设计成EditText和
Button这两个控件的大小和它们的内容相适应,如图2所示:
图2. 宽度设置为“wrap_content”后的EditText
和Button
这样做对于按钮来说没有什么问题,但是对文本框来说可能就不太好,因为用户可能会输入更长的字符串。所以最好是屏幕中没有用到的宽度给文本框使用。我们可以在LinearLayout中使用比重(Weight)属性来实现,具体来说是使用
android:layout_weight这一属性字段。
比重的值是一个数字,这个数字用来表征每个View相对于它兄弟View所消耗的空间来说,可以使用的剩余的空间大小。可以理解为饮料的配方:“2份伏特加和1份咖啡甜酒”,这就意味着饮料中的三分之二是伏特加。例如:如果你给了一个View的比重是2,而另一个View的比重是1,那么他们的和是3,所以第一个View消耗剩余空间的三分之二,而第二个View消耗三分之一。如果你又添加了第三个View,它的比重是1,那么现在第一个View将会获得剩余空间的一半,另外两个则是四分之一。
默认所有的View的比重是0,所以如果你仅对一个View的比重定义为大于0的任何数,那么这个View将会拿到剩余的所有空间,而其他View则仅拥有他们所需要的空间。所以,为了让EditText把剩余空间填满,把它的比重设置为1,同时让按钮没有比重就可以实现了。
<EditText android:layout_weight="1" ... />
当你定义了比重时,为了提高布局的效率,我们把EditText的宽度设置为0(0dp)。将宽度设置为0有利于提高布局性能,因为使用"wrap_content"作为宽度的话需要系统计算控件的宽度,而这是不必要的,因为这个宽度值需要另一个控件的宽度计算结果,以此来进一步的填满屏幕的宽度。
<EditText android:layout_weight="1" android:layout_width="0dp" ... />
图3展示了把比重全部分配给EditText后的运行结果:
图3. EditText拥有了布局的所有比重,所以它填满了LinearLayout剩余的空间
现在,修改后的布局文件应该是这样的:
<?xml version="1.0" encoding="utf-8"?> <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"> <EditText android:id="@+id/edit_message" android:layout_weight="1" android:layout_width="0dp" android:layout_height="wrap_content" android:hint="@string/edit_message" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button_send" /> </LinearLayout>
http://www.cnblogs.com/jdneo/p/3439108.html