前言
话说上一节的标题其实写错了,因为上一节其实没讲相对布局。前几天感冒耽误了两天,今天舒服了一些,继续奋斗!
根据父布局定位
所谓的 RelativeLayout(相对布局)就是用相对位置定位的布局。先来看一下继承结构:
可见 RelativeLayout 和 LinearLayout 一样都是 ViewGroup,都是 View 的子类。RelativeLayout 是一个布局,其中的子 View 的位置可以通过和别的 View 或 父布局的关系来描述。这怎么被我形容的这么抽象...直接先看看代码吧,这东西就叫 RelativeLayout :
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:text="左上角"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:text="又上角"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="中间"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:text="左下角"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:text="右下角"/>
</RelativeLayout>
先来看一下效果图吧:
现在仔细分析一下代码,乍一看挺复杂的。其实不然,很多都是我们学过的。只有这一系列是新面孔:
属性名 | 含义 |
---|---|
layout_alignParentTop | 在父布局的顶部 |
layout_alignParentBottom | 在父布局的底部 |
layout_alignParentLeft | 在父布局的左边 |
layout_alignParentRight | 在父布局的右边 |
ayout_centerInParent | 在父布局的中心 |
layout_centerVertical | 在父布局水平居中 |
layout_centerHorizontal | 在父布局垂直居中 |
其实就是翻译了一下名字,把对应的属性值设置为「true」就生效。这些值通常都组合使用,比如在右上角就可以分解为「在父布局的右边」+「在父布局的顶部」。
根据兄弟组件定位
话不多说,看代码:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="中间"
android:id="@+id/button_center" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="左上角"
android:layout_toLeftOf="@id/button_center"
android:layout_above="@id/button_center"
android:id="@+id/button_above_left"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="右上角"
android:layout_toRightOf="@id/button_center"
android:layout_above="@id/button_center"
android:id="@+id/button_above_right"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="左下角"
android:layout_toLeftOf="@id/button_center"
android:layout_below="@id/button_center"
android:id="@+id/button_below_left"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="右下角"
android:layout_toRightOf="@id/button_center"
android:layout_below="@id/button_center"
android:id="@+id/button_below_right"/>
</RelativeLayout>
这次的新属性更加的直白:
属性 | 解释 |
---|---|
layout_above | 在目标控件的上面 |
layout_below | 在目标控件的下面 |
layout_toLeftOf | 在目标控件的左边 |
layout_toRightOf | 在目标控件的右边 |
layout_alignTop | 对齐目标控件的上边界 |
layout_alignBottom | 对齐目标控件的下边界 |
layout_alignLeft | 对齐目标控件的左边界 |
layout_alignRight | 对齐目标控件的右边界 |
举个栗子:比如控件 a 要在控件 b 的右边,实现的步骤就是先给控件 b 设定一个 id ,然后给 a 定义上面表里的「在目标布局的右边」属性。不过要注意的是当一个控件去引用另一个控件的 id 时,该控件一定要定义在引用控件的后面,不然会出现找不到 id 的异常现象,不过也挺好理解的,因为程序是从上到下解析的。效果图如下:
总结
今天我们讲了相对布局,可能是上天眷顾我,这一讲很简单。RelativeLayout 是一个很常用的布局,大家一定要掌握,那么作业来了,做一个简单的遥控器的界面:
大家一定要加油!!
2020/5/24 注:
这是我 2018 年高中毕业的假期写的,当时并没有自己搭建博客,近期我给这一系列的文章都放到我自己的博客上。
当时写这个系列文章的想法就是扎实下基础,然后能帮到更多的人就更好了,但是大学开学之后就开始了新生活,没有大块的时间去编撰,系列文章也没有再更新过。但是我其实并不想放弃这个系列,那就,有缘再见吧,拜拜ヾ(•ω•`)o