//此系列博文是《第一行Android代码》的学习笔记,如有错漏,欢迎指正!
布局是一种可用于放置很多控件的容器,它可以按照一定的规律调整内部控件的位置,或是嵌套子布局,从而编写出精美的界面。基本布局一般有四种,我们来逐个学习.
一、LinearLayout
LinearLayout 又称作线性布局,是一种非常常用的布局。通过 android:orientation 属性指定可以指定排列的线性方向,默认的指定是 horizontal,此时控件就会在水平方向上排列。
例如我们在布局文件里定义3个button,ProView如下:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMoAAAB1CAIAAACAm+lfAAAK40lEQVR4nO3b61NS6x7Acf+z04ty5uixdsdLJgILUhIWl8AEt1SKKJZEedloetRExYPZrrHdqUlQa6eCyTVPKbgWy5o5ZlbTVNNlOufFefG02XhDEB4u+vvO78XzguqZ1meetQDNqvz5WqSp/nMUEUYVms7wke82Z5S7TkdoZFUxj/RsbCOpjGqEsl9OS9thdp2saGBFsqXa3tausKKwlVRY0dsSK4wpv2yZMtvxwgwrihOrMz1hwdEVN6+YYV1L6IkV16GFGxYcXXHwiuPE2sePWRvHKDwDR1esvODEigKWpNIoVhgrZKm/Zhk0WTG+MTxYj1khWGjg6Nojr1S8MUx/WBtswdG1F16pPbHS/G4YPiI5PNQnhBc8Zm0c8Y+jC+6M8fM62G8Mt4FVaRTD0ZUAXml5YqUcFho4uuLgBY9ZO8OCoys+XvDGcGdYYoVRrDDCt0Bx8sIFK1NOrG1sKX4MCUdXfLzSBVaaPGaF2xIr4KPURPACWFthiRVGEr7AjpMXPGZtCwuOrmTwOlCPWVsHvgXCxWv/wYryxIKjCy+vg/mYBUcXdl4AKzSiM/BQnzhe+wJWvHfDjUcX3BkTxAses+DowsVrn8GK6Y0hHF0p5JX5sPZkC77Axs0rTX9/Fd/dMDQkHF2YeaX58zuWEwvBIuHowskr8++GccBCAz97k2BeAplZIDMXlk+gRbnMXFA2US4zl0nNZVJz/qkJtAhbD5VJh/7Ot6HFKcnQcZ7tlGQITfj6p9BaPPQTYT0lHkJzjGvli4fQoDVPPMQTDx3lWtGCRw7lcaw8cghNHsfKIwfR5LHH0YIgB//GHifIQTS5peOEaBANWnOFA1zhQA7rAVpsu+YIBzjCgb+WPEALdsXAX47/q/hUPxpYx7/Omnzk2zoToXm449i2ztSm8cY61smt44k84xPRjHvTPLBtM/etznsPYBI5WWtra68OfKurq6urq/+BEl3W/yL2XwiKo0i8Ur03KOPbnleqdwXtkzbzSvV+oH1VFsCC8JUFtiB8ZaV6A9B+DnhBGANeEMaAF4SxXXh9//79Y3r09evXhG/sQyL68uXL1o0l5G+Os8+fPyfeS4ztwmttbW1lZWVlZYVJygQZZqdhVlbCL+Ta2lqEF0czdDBI0XT8QweDnz59Cm3s9evXCflrE7Kxjx8/4oITXbvwevHiRcphoaFo+t27d+EbSwdbaNbX18M3lnJYoXn16hUuONG1G6+XL1MO6wcImn7//n1oYy9fvozHVmJ5vX37NnxjKVcVmrW1NVxwoivFvGIwkQheCFZibQGvCKWMV8wy4uMVggW8klkKeO3xjrZXXptgJdwW8IpQUnkFGWZxaSlpvLbCisDr2fPnu14tfyCwuLSUZF7xbCzDeHV1dZWWlpIkKRaLXW734ODgL0Yjs7IyPTMjkUo7r10jSfL48eMVFRXV1dU/19QIBIL8/HySJI0dHTOzswKBgCRJUiz2er1Wm62goMDldgcZprq62mazIRMzs7PahoaampqYePX29RUVFQkEgvLycrvdbhkZaWhooINBp8vFZrN7e3sFAkFeXh7B45EkWVNTw+FwsrOzCYK41NzsmJvjcrl8Pp8gCMfc3NTDh9nZ2dMzMxRNq8+dG715E10q8/Awl8vlcLlt7e3R8xoeHs7LyyMIgs1mT0xOjt68qVQqKZp+urCQm5vb19dHEEROTk5JSYlAIFCr1QRBHD58mCAIrVbrdLn4fD6fz2ez2b///vu803nkyBHbxARF0/VarclkQv/EjdFRNpvN4/FaWlszm1dnZ2drayuzsqLT6YaHhwcGBtra2xEvsViMXsNisRYWFtDa4XCUl5cjAUql8tbt20GGuX79elNTk9VmO3bsWHV1dZBhlCrVuNWKXvbb3bv/tFhkMllMvHp6ey81NwcZxmAwdHV3WywWrVaLeLFYLHRo8Xg8x9wc+n/3+nz5+floXVVVhS6VyWRSKpVTU1PZ2dlCoXCZotRq9ejoKHqZpr7e4XDYHQ4Olxs9L7PZrD53jqLp9vb25ubmG6OjVX/wysnJQa+pEArHrVa0Xqao3NxcfyBA0XRdXV1XdzdF05aREalUOu90Zmdn8/n8wPKyRqPp/4OX2Wy2Oxw+n6+wsDDjeVUIhY06HUEQHq83Gl5lZWVIQFFR0dOFhSDDPHz0SCaTWW02kUiEzIXzCjLM9PS0VCqNzGvT5149vb08Pl+j0bBYLLvdvhMvu8OxldeJ4uK5J08omrY7HCUlJVNTU2w2W6lSmQYGwnmhaW1t1ev1MfE6UVx8/sKFwsLCyampmHiVlZVNTk5SNO3xeo8ePTrvdBYVFWk0mq6urnBeFE1bLBbB6dMdHR0Zz+vipUtOp7Neq+3v7w/xejw9vYkXuurhvFgsltPlCjKMzWarrKxEvOadTh6PJ5FI4uXV06PRaJ7MzzddvGg0Gi0WS/0WXgRB2O32rbxKS0vRrfDx48ccLhfx8ni9J4qLJRJJOK/h4WGxWIyuffS8zp4965ibu2wwNDY23hgdraqqipKXUCh8MD5O0fTckycFBQWI19OFhZMnT8pksnBeHq/35q+/EgRBUVRm89Lr9T6fr76+vru7+86dOwqFYmFhod9kqqurQ68pKSl5uh0vvV5vuHLF5/PV1dX19PSMW60ikSjIMP/o6cnNzd0zL0Snp6enXqv1eL26pqarV6+OW60CgcDn8w2ZzWfOnEGv4XA42/K6bDBcqK31eL21dXWGK1cQL4qm+02mQ4cOhXiNjY2hhzOfz7fpKkbmpVQq3R6P/vLl2trayamp4pMnXW63ZWTkVFlZZF4dHR0qlcrt8TQ1Nel0OsQL3SsPHToU4nXu/Plbt29Pz8wUFRUtZzSvW7duqdVqtVrd1t6+5PejY0OpVDbqdCFSDQ0Ni4uLaO3xePR6PVr7A4GWlha5XN557RpF07N2+9WWliDDUBSl1WpnZmdDkpwuV2tbWzS8Qm8Gx8bGlCqVUqXS6/XorVbf9etyufzChQsutxu9RqfTudxu9P/+72fPamtr0XrJ7zcYDCKR6LLB4A8EHHNzOp0OXWmNRhO68G1tbXLFjza9m4vA6969e3KFQq5QNDQ2en0+iqZNJpNEIlGqVKE7teHKlZnZ2RCvmpqawPIyWre1tYlEoqaLFxcXF70+n0ajoWiaoiidTvfb3bvoj8zMzlZVVcnl8nv372f2zTHhn2ZFP1t57fS5Q0yfRyRk4HOvnUrAV9q4YSWEF9arCLx2Ki5eyYEFvA4cr2TCQkNR1J554b6KwGunYuaVZFV/EgFe+5tX8k+sDUT2yisJVxF47VS0vFIIK8Trw4cP4RtLE17LFLXhx2jThtcyRb158wYXnOjahdf6+rrf71/abRaXlnAPRVHfvn0Lbezt27eLUfQc9zx/HggEwn/NBG0M+78bxfj9/k2/ZpL8MvgX0b5//57qLUC7lMG8oPQPeEEYA14QxoAXhDHgBWEMeEEYA14QxoAXhDHgBWEMeEEYA14QxoAXhDHgBWEMeEEYA14QxoAXhDHgBWEMeEEYA14QxoAXhDHgBWEMeEEYA14QxoAXhDHgBWEMeEEYA14QxoAXhDHgBWEMeEEYA14QxoAXhDHgBWEMeEEYA14QxoAXhDHgBWEMeEEYA14QxoAXhDHgBWEMeEEYA14QxoAXhDHgBWEMeEEYA14QxoAXhDHgBWEMeEEYA14QxoAXhLH/AwSZeMqqWjIvAAAAAElFTkSuQmCC" alt="" />
改成vertical后便是:
aaarticlea/png;base64,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" alt="" />
需要注意的是,如果 LinearLayout 的排列方向是 horizontal,内部的控件就绝对不能将宽度指定为 match_parent,因为这样的话单独一个控件就会将整个水平方向占满,其他的控件就没有可放置的位置了。同样的道理,如果 LinearLayout的排列方向是 vertical,内部的控件就不能将高度指定为 match_parent。
布局文件中还有一个android:layout_gravity可以用于指定控件在布局中的对齐方式。android:layout_gravity 的可选值和 android:gravity 差不多。需要注意,当LinearLayout 的排列方向是 horizontal时, 只有垂直方向上的对齐方式才会生效, 因为此时水平方向上的长度是不固定的,每添加一个控件,水平方向上的长度都会改变,因而无法指定该方向上的对齐方式。同样的道理,当 LinearLayout 的排列方向是 vertical 时,只有水平方向上的对齐方式才会生效。
如当我们在android:orientation 属性为vertical时,改变3个button的layout_gravity,可使ProView呈现如下图:
aaarticlea/png;base64,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" alt="" />
LinearLayout 中还有一个重要属性:android:layout_weight。当我们把不同控件的weight设置为不同的值,系统会为其按weight的比例分配大小,例如我们在排列方向为水平时,声明一个EditText和Button如下:
<EditText
android:id="@+id/input_message"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4"
android:hint="Type something"
/>
<Button
android:id="@+id/send"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Send"
/>
由于我们使用了 android:layout_weight 属性,此时控件的宽度就不应该再由 android:layout_width 来决定,所以我们把layout_width都指定为0dp,其ProView效果如下:
aaarticlea/png;base64,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" alt="" />
假如我们将Button的layout_width指定为“wrap_content”,而EditText的layout_weight指定为1,此时Button 的宽度仍然按照 wrap_content 来计算,而 EditText 则会占满屏幕所有的剩余空间。使用这种方式编写的界面,不仅在各种屏幕的适配方面会非常好,而且看起来也更加舒服。
二、RelativeLayout
和 LinearLayout 相比,RelativeLayout 显得更加随意一些,它可以通过相对定位的方式让控件出现在布局的任何位置。
比如我们添加了下面3个代码:
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="Button 1" /> <Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Button 2" /> <Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:text="Button 3" />
代码的意思显而易见,layout_alignParentLeft、layout_alignParentTop、layout_alignParentRight、 layout_alignParentBottom、layout_centerInParent 这几个属性由其字面可知:与父布局的相应位置对应。PreView如下:
aaarticlea/png;base64,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" alt="" />
我们也可以让控件相对于控件来定位:
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Button 2" /> <Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@id/button2"
android:layout_toLeftOf="@id/button2"
android:text="Button 1" /> <Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@id/button2"
android:layout_toRightOf="@id/button2"
android:text="Button 3" />
代码意思显而易见,其ProView如下:
aaarticlea/png;base64,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" alt="" />
不过注意,当一个控件去引用另一个控件的 id 时,该控件一定要定义在引用控件的后面,不然会出现找不到 id的情况。
三、FrameLayout
FrameLayout 相比于前面两种布局就简单太多了,因此它的应用场景也少了很多。这种布局没有任何的定位方式,所有的控件都会摆放在布局的左上角,这里就不详细说明了。
四、TableLayout
TableLayout 允许我们使用表格的方式来排列控件。设计表格时我们尽量应该让每一行都拥有相同的列数,这样的表格也是最简单的。而当表格的某行一定要有不相等的列数时,就需要通过合并单元格的方式来
应对。下面我们来设计一个登陆界面的布局文件:
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:stretchColumns="1"> <TableRow>
<TextView
android:layout_height="wrap_content"
android:text="Account:" />
<EditText
android:id="@+id/account"
android:layout_height="wrap_content"
android:hint="Input your account" />
</TableRow>
<TableRow>
<TextView
android:layout_height="wrap_content"
android:text="Password:" />
<EditText
android:id="@+id/password"
android:layout_height="wrap_content"
android:inputType="textPassword" />
</TableRow>
<TableRow>
<Button
android:id="@+id/login"
android:layout_height="wrap_content"
android:layout_span="2"
android:text="Login" />
</TableRow>
</TableLayout>
TableLayout 中每加入一个 TableRow 就表示在表格中添加了一行,然后在 TableRow中每加入一个控件,就表示在该行中加入了一列,TableRow 中的控件是不能指定宽度的。这里我们将表格设计成了三行两列的格式,第一行有一个 TextView 和一个用于输入账号的EditText,第二行也有一个 TextView 和一个用于输入密码的 EditText,我们通过将android:inputType 属性的值指定为 textPassword,使EditText变为密码输入框。第三行只有一个用于登录的按钮,前两行都有两列,第三行只有一列,所以我们使用android:layout_span="2"让登录按钮占据两列的空间。 另外,由于 在 TableRow 中 我 们 无 法 指 定 控 件 的 宽 度 ,可能导致每一行都不能充满屏幕的宽度。 这 时 可以使 用android:stretchColumns 属性让某一列控件拉伸以充满整个屏幕的宽度。代码的ProView如下:
aaarticlea/png;base64,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" alt="" />
//End.