Android入门开发之RelativeLayout(八)

前言

在上一小节我们谈到了android开发中六种布局之一线性布局,在我们的实际开发中,线性布局也是用的比较多的中布局。可以毫不忌讳的说,在我们android开发中,相对布局和线性布局占的比重可以达到70%以上,另外的30%就是被帧布局占领了。至于另外的三种,压根就不会用到。所以正在学布局的小伙伴们不用担心有很多东西要学,其他的三种你可以不用理会,再者布局是很简单的一块内容,没什么难的!你只要理解了一个布局的属性值,另外一些布局你也会用,毕竟一通百通,我那么菜都能学会,而且在座的各位又是天才,��so…

在上一节我们说了,LinearLayout是常用的布局,其实在更多的时候,我们利用的都是它的权重(weight)属性,毕竟是等比例划分屏幕尺寸,这对我们开发后期做屏幕适配是一个很大的助力。说到这里,可能就有小伙伴一个劲的使用LinearLayout布局,而不考虑android系统在做界面渲染的时候,需要耗费的内存。如果一个层面的层次结构太复杂,很可能会导致渲染布局占用太多的系统资源导致app性能极差。所以,小伙伴们必须注意到:LinearLayout虽然功能比较强大,但是它也不是万能的,如果一个界面相对复杂,我们可以考虑使用其他布局来实现,或许可以简化布局。

总结 :听说LinearLayout和RelativeLayout搭配使用更佳!

RelativeLayout常见属性

注意:由于相对布局的属性实在是太多了,我在这里结合我自己的使用情况以及官网给出的参数信息对部分属性作出解释。属性大多数都要加layout_的前缀,我在这里为了方便,我就没有加上layout的前缀。

官网地址:https://developer.android.com/reference/android/widget/RelativeLayout.html

温馨提醒:要自备梯子,要够长,够粗,够壮,不然容易摔死!��������

相对布局的属性都是成双成对的,所以我们在这里分成几大块讲解

控件和控件内容之间

1. android:gravity
这个属性我们在之前讲过,是控件内的文字在控件中的位置!
注意,是控件中的内容在控件中的位置,不是控件本身在布局中的位置。
2. android:ignoreGravity
这个属性英语好的小伙伴应该可以猜出来,就是说该控件不受Gravity的影响。
用的比较少,了解即可。

控件和布局之间

3. android:alignParentLeft
左对齐,控件靠近布局的左边
4. android:alignParentRight
右对齐。与上面的最对齐相对应,这个是在布局的右侧
5. android:alignParentTop 和 android:alignParentBottom
这个就不用过多解释了吧,一个是在布局的顶部。一个是在布局的底部
6. android:centerInParent
可选值有true和false, 这个是说控件在相对布局的中心
7.android:centerVertical 和 android:centerHorizontal
可选值也是有true和false的,这两个也是一对。
我们之前讲过的LinearLayout有方向,那么根据我们上节我们学习的内容,
不难猜出上面的两个属性,没错,第一个是垂直居中,第二个是水平居中。

控件和控件之间

注意,这里是以父布局为相对布局的前提下,线性布局并没有相对布局的属性

8. android:toLeftOf
用例子来说明,现在布局有两个按钮A和B,如果A设置了这个属性,属性值为B的id。
那么就说明A在B的左边,有没有觉得有点绕?没关系,我们说完了属性,会用例子来讲解这个属性的。
9. android:toRightOf
同上面的例子,xx控件在yy控件的右边
10. android:above 和 android:below
聪明的你肯定想到了,有上必有下,有左必有右,嗯。你猜的没错,是这个梗。
第一个属性是xx在yy的上面, 第二个属性是:xx在yy的下面,

在这里提前透露一下,我们一般写控件,我们都会给控件一个id,便于我们在Activity或者Fragment中通过findViewById(R.id.xx)来找到它,定义控件id一般都是这样的格式,还有另外一种格式就是在代码中通过setID来定义。不过不常用,基本上都是在xml文件中定义。

@+id/xx

但是我们在使用toLeftOf, toRightOf等属性的时候,我们需要引用控件的id,引用控件id格式为:

@id/xx

如果控件A想要引用控件B,那么控件B必须在控件A之前定义,否则会报错。

ps:上篇文章写的真是烂,还被推上了首页,惭愧惭愧,在这里再仔细说说Margin和Padding的区别。我真是没有想过这么烂的文章会被推向首页,自己仔细的反思了一下,决定以后每篇文章都认认真真排版,认认真真的写,对自己负责,也对读者负责。

Margin家族

11. android:marginTop
肯定有小伙伴已经联想到了肯定会有下左右,嘿嘿,都是老司机了。咱们敞开天(d)窗(d)说亮话。��
这个是肯定有的,那么这个属性是什么意思呢?margin英文翻译就是“边缘;页边的空白”的意思。
呸呸呸,这解释一点不通俗易懂,还是我自己来解释一下,
marginTop说白了就是设置控件距上边控件的距离。实际上就是外边距!
可能又会有小伙伴问了:为什么TM就是外边距呢?“搞事搞事,就你爱搞事!��”
还有一个内边距可以了么?帅哥美女们?��
12. android:marginBottom 和android:marginLeft以及android:marginRight
你们会不会举一反三啊? 什么?不会?卧槽,这怎么能行,我还是解释一下
marginBottom就是控件距离底部的距离
marginLeft就是控件距离左边的距离
marginRight就是控件距离右边的距离
13. android:margin
这个属性设置的效果就等同于上面上下左右四个marginXXX同时设置的效果。

Padding家族

14. android:paddingTop android:paddingBottom
15. android:paddingLeft android:paddingRight
16. android:padding
这个属性是在是和margin一模一样,唯一的区别就是意义不同。
margin是指的外边距,而padding指的是内边距
举个��
TextView是一个文本控件,文本控件内有文字HelloWorld,
如果我们给TextView这个控件设置paddingTop为10dp,那么TextView这个控件会整体向下偏移10dp。
如果我们给TextView这个控件设置paddingTop为10dp,那么TextView中的文字HelloWorld会在控件内部向下移动10dp。
明白了吧?很简单的,你自己下去实际操练一下就明白是什么回事了。

演示

我在想你们那么帅,我要不要画张图给你们演示一下呢?“什么?不要?就你最好看,我偏要画,气死你,气死你!��”

相对布局的组件和布局之间的关系如下所示

相对布局的组件和组件之间的关系如下所示

我想这下你不难理解相对布局的属性了吧,说了这么多,下节我们用实际的栗子来联系一下相对布局。

实战演练

相信小伙伴都见过九宫格吧,其实九宫格的实现也是很简单的,实现图如下,我这里是使用相对布局来实现的,实际上用线性布局同样也可以实现,有兴趣的小伙伴们可以动动手,天气冷了,赶紧把你的手拿出来冻冻。

其实实现效果也是不难的,我在这里把代码直接给你们粘贴一下,相信理解了上面的属性值的意义的小伙伴们看懂是没什么问题的。代码比较简单,所以我就没有写注释了,如果小伙伴想看代码,我会将Android基础入门教程的代码都上传到我的github上,有需要的可以去下载。

<RelativeLayout
    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"
    tools:context="com.selfassu.layoutdemo.MainActivity">

    <TextView
        android:id="@+id/tv_center"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_centerInParent="true"
        android:gravity="center"
        android:background="#f00"
        android:textColor="@android:color/white"
        android:text="中间"/>
    <TextView
        android:id="@+id/tv_center_top"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:gravity="center"
        android:layout_centerHorizontal="true"
        android:layout_above="@id/tv_center"
        android:textColor="@android:color/white"
        android:background="#0ff"
        android:text="中间的上面"/>
    <TextView
        android:id="@+id/tv_center_top_left"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:gravity="center"
        android:layout_centerHorizontal="true"
        android:layout_above="@id/tv_center"
        android:layout_toLeftOf="@id/tv_center_top"
        android:textColor="@android:color/black"
        android:background="#ff0"
        android:text="中间的上面的左边"/>
    <TextView
        android:id="@+id/tv_center_top_right"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:gravity="center"
        android:layout_centerHorizontal="true"
        android:layout_above="@id/tv_center"
        android:layout_toRightOf="@id/tv_center_top"
        android:textColor="@android:color/white"
        android:background="#f0f"
        android:text="中间的上面的左边"/>
    <TextView
        android:id="@+id/tv_center_right"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:gravity="center"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@id/tv_center"
        android:textColor="@android:color/white"
        android:background="#00f"
        android:text="中间的右边"/>
    <TextView
        android:id="@+id/tv_center_left"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:gravity="center"
        android:layout_centerVertical="true"
        android:layout_toLeftOf="@id/tv_center"
        android:textColor="@android:color/black"
        android:background="#fff"
        android:text="中间的左边"/>
    <TextView
        android:id="@+id/tv_center_bottom"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:gravity="center"
        android:layout_centerHorizontal="true"
        android:layout_below="@id/tv_center"
        android:textColor="@android:color/white"
        android:background="#0f0"
        android:text="中间的下面"/>
    <TextView
        android:id="@+id/tv_center_bottom_left"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:gravity="center"
        android:layout_centerHorizontal="true"
        android:layout_below="@id/tv_center"
        android:layout_toLeftOf="@id/tv_center_bottom"
        android:textColor="@android:color/white"
        android:background="#3c3c3c"
        android:text="中间的下面的左边"/>
    <TextView
        android:id="@+id/tv_center_bottom_right"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:gravity="center"
        android:layout_centerHorizontal="true"
        android:layout_below="@id/tv_center"
        android:layout_toRightOf="@id/tv_center_bottom"
        android:textColor="@android:color/white"
        android:background="#ff2323"
        android:text="中间的下面的右边"/>
</RelativeLayout>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值