就目前而言Android开发中最常用的两种布局就是线性布局和相对布局,所以我重点记录了线性布局和相对布局,其他也只是大致了解,下面我会在先记录概念然后实例中去分别写这两种布局
因为我个人学习当中在看《第一行代码》这本书,所以可能会引用很多书中的内容,但我也会加上我个人的理解
首先先解释一下布局和控件以及两者的关系
一个丰富的界面是由很多个控件组成的,而为了让界面看起来尽可能地美观,我们需要布置控件,这个时候我们就需要用到布局来管理了,布局是一种可以用于放置很多控件的容器,布局中也可以嵌套布局
LinearLayout
定义
LinearLayout又被称作是线性布局,此布局会将它所包含的控件在线性方向上依次排列,那么这个线性方向就包含了垂直方向和水平方向,下面我会具体来介绍一些属性
常用属性(不仅仅是LinearLayout常用的,其他如Button、TextView等都会很常用)
属性 | 作用 |
---|---|
android:id | 设置一个本字段的专属id,是一个标识,我们可以通过这个id来找到这个布局空间 |
android:orientation | 设置线性布局是在哪个方向,vertical是垂直方向,horizontal是水平方向 |
android:layout_width | 布局宽度 |
android:layout_height | 布局高度 |
android:layout_background | 布局背景,可以设置颜色,也可设置图片,也可以通过xml文件自己画 |
android:layout_margin | 外边距,距离外部元素边距 |
android:layoutpadding | 内边距,距离内部元素边距 |
代码样例
创建一个EmptyActivity,进入activity_main.xml文件中,将布局改成LinearLayout,将宽度设置成匹配父控件,这里引申一点
设置控件宽和高的时候,可以自己设置具体的大小如100dp,200dp(为什么不是px?也可以是px,但是手机的碎片化太严重了,在设计的时候使用px为单位,在不同的手机上可能会出现不同的效果,所以在AS中采用了dp,也它可以自动去匹配所定义的大小),除了自定义也可以选择wrap_content或者是match_parent这两种属性,那么分别是什么意思呢
wrap_content:包含内容,也就是内容有多长,控件就有多长
match_parent:匹配父控件,也就是与父控件保持一致
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#000000"
/>
</LinearLayout>
在xml文件中输入以上代码时,旁边的展示板就会出现相应的布局展示,目前我把其中一个布局改成黑色,所以出来就是主布局中嵌套这=着一个小的布局,而我将这个小的布局长宽设置成了100dp,出来的样式是这样的,那么如何让这个小的布局具有居中,或者和外面的大布局有一个边距呢
在最外面的一层布局上将padding的设置一下
android:padding="15dp"
这样里面那一层布局就会相对的和最外层布局有15个dp的边距
那么怎样居中呢
只需要在最外层的布局中添加一个属性
android:gravity="center"
当然这个属性还有很多值,感兴趣的可以挨个试试(反正我是挨个去试了一遍==)
这本身就是两个布局的嵌套,接下来我们来尝试一下再嵌套一个布局进去
因为在最底层布局设置的是垂直的线性布局,因此,这两个布局呈垂直分布,而如果我们将 android:orientation="vertical"这个值设置成horizontal,我们可以来看看效果
经过试验是不是对这个布局有一些了解了呢?
总之他还有非常多的属性值得我们去研究,这过程是非常有趣的,关于线性布局我就写到这里。
RelativeLayout
RelativeLayout又称作相对布局,和LinearLayout的排列规则不同,RelativeLayout的排列更加随意一点,它可以通过相对定位的方式让控件出现在布局任何位置,正因为此它的属性非常多。
上一篇在讲LinearLayout的博客中android:id这个属性的作用还看不太出来,那么在RelativeLayout中id就会显得非常重要,因为我们经常是通过id去获取布局,然后定义下一个布局的位置。
这个时候我们来举个栗子,在这个布局中,如果不获取相对位置,直接排列的话会出现什么结果
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/rl_1"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#000000"
android:orientation="vertical"
/>
<RelativeLayout
android:id="@+id/rl_2"
android:layout_width="100dp"
android:layout_height="100dp"
android:orientation="vertical"
android:background="#00FFFF"/>
<RelativeLayout
android:id="@+id/rl_3"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#B32BD5"/>
</RelativeLayout>
如代码中所示,在一个布局中嵌套三个布局,如果在LinearLayout中,这三个布局就是呈线性排开的,那么在这里呢?
对。没错,他们会依次覆盖,所以怎样将他们排开呢,这个时候RelativeLayout中提供了很多属性供我们参考,这里全部用到了id来获取控件
这其实很简单不需要太多赘述。
之后的一系列其实自己研究即可,这个非常简单。
总结下来其实就是这跟CSS布局很像,如果说有前端的基础,还有Java的基础,入门Android非常的简单,当然我只是说入门。