Android布局注意事项

Android的布局还是有一定的讲究的。如何设置布局的属性也要好好学习,刚学习的时候对不居中full_content,wrap_content,match_parent,0dp,layout_weight搞不清楚,终于在曲曲折折中摸索清楚,从Android training course in Chinese中学到了不少,果然是精华。

让输入框充满整个屏幕的宽度

当前EditText和Button部件只是适应了他们各自内容的大小,如下图所示:

edittext_wrap

这样设置对按钮来说很合适,但是对于文本框来说就不太好了,因为用户可能输入更长的文本内容。因此如果能够占满整个屏幕宽度会更好。LinearLayout使用权重的属性来达到这个目的,你可以使用android:layout_weight属性来设置。

你可以根据每一个部件所占的空间来指定权重值的大小,它的总数是有同级别的部件来决定的。就类似于饮料的成分配方:“两份伏特加酒,一份咖啡利口酒”,意思就是这个酒中伏特加酒占三分之二。例如,你设置一个View的权重是2,另一个View的权重是1,那么总数就是3,这时第一个View占据2/3的空间,第二个占据1/3的空间。如果你再加入第三个View,权重设为1,那么第一个View(权重为2的)会占据1/2的空间,剩余的另外两个View各占1/4。(请注意,使用权重的前提一般是给View的宽或者高的大小设置为0dp,然后系统根据上面的权重规则来计算View应该占据的空间。但是很多情况下,如果给View设置了match_parent的属性,那么上面计算权重时则不是通常的正比,而是反比,也就是权重值大的反而占据空间小)。

对于所有的View默认的权重是0,如果你只设置了一个View的权重大于0,那么这个View将占据除去别的View本身占据的空间的的所有剩余空间。因此这里设置EditText的权重为1,使其能够占据除了按钮之外的所有空间。

<EditText  android:layout_weight="1" ... />

为了提升布局的效率,在设置权重的时候,你应该把EditText的宽度设置为0dp。如果你设置为"wrap_content"作为宽度,系统需要自己去计算这个部件所占有的宽度,而此时的因为你设置了权重,所以系统自动会占据剩余空间,EditText的宽度最终成了不起作用的属性。

<EditText  android:layout_weight="1" android:layout_width="0dp" ... />

下图展示了设置权重时候的结果

edittext_gravity

现在看一下完整的布局文件内容:

<?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>

你可能感兴趣的:(Android布局注意事项)