老王讲IT:Android应用开发第七章

老王讲IT——第七章

Android应用开发第七章——LinearLayout

一、主要属性

这节课咱们来讲一个咱们非常熟悉的东西,每天都在用。不管搞哪个控件,都得用到这个东西。就是linearlayout的这一个布局。对于linearlayout来说,我们主要学习8个属性。

orientation布局中组件的排列方式
​
gravity 控制组件所包含的子元素的对齐方式,可多个组合
​
layout_gravity控制该组件在父容器里的对其方式
​
background为该组件设置一个背景图片,或者是直接用颜色覆盖
​
divider 分割线
​
showDividers设置分割线所在的位置,none(无),beginning(开始),end(结束),middle(每两个组件间)
​
dividerPadding设置分割线的 padding
​
layout_weight(权重]该属性是用来等比例的划分区域

Orientation咱们之前在代码中就用了很多次了,咱们直接在代码中看看是什么东西。

①Vertical:纵向排列

②Horizontal:水平排列

那么这两个是什么意思呢,代表的是它的子view按照什么顺序去排列(也就是咱们每周学的那些控件,咱们统称他为子view;

再重复一遍:vertical,horizontal这两个的意思是它的子view按照水平排列还是按照纵向排列,也就是垂直排列。而子view就是咱们每周学的那些控件。明白?

来,那咱们来试一下。我再这个容器里边在创建几个linearlayout。代码复用一下(不要懵逼,就是复制粘贴一下,哥们也是显的专业一点)然后咱们把颜色改一改,更明显一点。

目前来说这几个linearlayout是不是纵向排列的,这也就是咱们的vertical它的作用。

如果我先改成horizontar那他就是水平的。

或者说我直接把这个orientation这个设置给它去掉,默认就是水平的。

学了这么久了大家也能在用的过程中肯定也感觉出来了,咱们最常用的就是Vertical,纵向排列,也就是垂直的。这个呢就是我们的orientation它的一个作用。只需要记住vertical是咱们最常用的就可以了。

二、看咱们上面的属性

Gravity:控制组件包含的子元素的对齐方式,可多个组合

啥意思呢,就是我们的这个linearlayout下边有三个子view。(三个盒子)。

那么我们直接在linearlayout里边写一下这个gravity这个设置。比方说目前咱们是纵向排列的方式,那我要是想让他们全部居中呢。目前可以看到有很多属性。Center就是居中。

然后我们的center_vertical是垂直方向的居中,center_horizontal是水平方向的居中。

那么因为我们的linearlayout它的排序是从上到下一个一个排列的。

所以说我们水平居中的时候它就是全部往上面堆在一起。下面这些空间就全部空着了。

这就是我们的gravity。

那么如果我们想让这三个linearlayout放到我们的屏幕下方该怎么办呢。

(Java代码中我们在逻辑运算符中学过一个东西叫做 或|)需要解释一下这个的作用吗?

与& 或| 非!

那咱们就可以通过语法或“|”语句进行排列方式的组合使用,我给center_horizontal后面再加上一个bottom。这样是不是就是水平居中后放到我们的底下去了。

当然gravity里面的属性有很多。咱们点进去看一下源码。练习的时候大家去试一试。

(1).然后接下来就是我们的Layout_gravity:子元素控制自己在父容器所在的位置(子元素自己控制自己,单个组件的排列方式)这是啥意思呢,咱们来实验一下。

先把咱们容器中的gravity删掉。那么我们想要自己控制自己该怎么办?首先我们要知道这个第一个红色,它能够控制的范围是多少。因为咱们刚刚说了,

linearlayout这个布局它是从上往下的。所以说红色可控制的区域就只有这点。

也就是说当我们的orientation为vertical的时候,实际上我们的红色能控制的方向只是水平方向的偏移。咱们可以使用center,还可以使用center_honizontal。当然咱们用center_vertical会发现是没有作用的。因为垂直方向的范围就这么一点点。你已经占满,还要怎么居中。

所以说当我们linearlayout这个orientation排列方向设置为vertical的时候,我们垂直方向基本上是没有权限可言的。

那么同样的如果我们更改成honizontal的时候那就是水平方向没有权限可言的。同样的道理。

那么这就是我们的layout_gravity它的作用。当然我们点进来看一下它还有什么属性,其实跟我们的gravity是差不多的。那么其实也就是你懂了一个后也就都懂了。然后接下来background这个咱们就不多说了,它的一个背景颜色,伙计们用的比我熟练。

三、分隔符

(1)我们来看下一个Divider就是设置我们的一个分割线。那我们的分割线怎么设置呢?来我们先把这个layout_gravity去掉。用我们的这个divider,它实际上就是添加一个图片。(在网上下载这么一张分隔符的照片)

可以使用showDividers来设置分割线:none(无)beginning(开始)end(结束)middle(每两个组件间)

dividerpadding,是去设置我们的这个分割线和边上的一个间距。那么这就是我们的dividerpadding。几个分割线属性的一个设置。就这么多。

四、权重

然后接下来就是我们的最后一个属性Layout_weight:(权重)等比例划分区域我们一般称为权重。那么这个权重是干什么的呢。因为我们目前整个的屏幕是不是就是这么大?但是有时候可能其中一个控件占了四分之一的空间,我想让另外一个控件占满整个屏幕,实际上另外一个控件的高是不好设置的。所以说这个时候我们就会用到权重

比方说我现在这个红色的宽高是100,那我给绿色的这个加一个权重。我设置一个 1,大家可以看到效果,也就是说我把权重设置为1的时候,它会把剩余的空间全部包裹住,这就是我们权重的作用。就是把剩余空间根据这个权重进行一个分配。那么也就是说我们目前这三个控件里边只有这一个有权重的时候,就是把所有剩余空间全部分配给它。那么如果我有两个呢。比方说我在红色的位置上再加一个weight。设置一个 1

大家可以看到,这个时候它就会把剩余的空间按照1:1的形式分配给红色和黄色。

那么我们后面的这个1,可不可以改成其它值呢?也是可以的,比如说我把红色改成2

改成2,我们的额红色区域变长了,这也是我们权重它的一个作用。就是说这个权重其实是按照一个比例值来判断的。就是说我红色为2,黄色为1,其实就是剩余空间被分成了三块,然后我们为2的权重它就占用两块,为一的就占用一块。

所以说我们的黄色区域就是在原有的100dp的基础上增加了一块空间。然后我们红色在原有的100dp的基础上增加了两块空间。记住,是在原有的基础上增加。那么这个怎么去判断,怎么去看呢。这个黄色区域高度现在不是100dp吗?那我把它的高度给改成400dp,来看一下。

那么我们的黄色区域变大了。所以说这个权重是在原有的基础上去增加的。(原改成100dp)

所以说我们的权重分配的是剩余空间。这个地方一定要注意。在重复一遍。我们的权重分配的是剩余空间。

坑:

那么这个地方就有一个小坑,就是我们在学习这块的时候需要注意的一个点。就是说当我们红色的这个高度为match_parent呢?

当高度为match_parent的时候就是直接把我们的权重全部都拿过来了。

那么这个时候为了让这个权重更加明显一些。我们把黄色的高设置为0dp。蓝色的高也设置成0dp。然后我在给蓝色的位置再加一个权重也为1

然后我们把分割线给它去掉。现在大家可以看到,我们把所有的区域都给了红色区域。它并没有按照比例去分配。这是为什么?就是因为哥们再前面说的,我们的这个权重它分配的是剩余空间。那么我们的额红色区域它直接就是个match_parent,那还有剩余空间吗?没了吧?

所以说目前就是显示的红色区域。

假设:

那么我假设我所有的高度都用match_parent呢?来,我们来看一下效果。

发现什么问题没有,我们所有的用match_parent后,结果反而我权重大的这个红色没有了。

而这个黄色和蓝色反而是1:1那么这个是怎么进行的一个计算呢?因为我们每一个地方都是match_parent,那么相当于是什么?相当于是占用了三个屏幕。

那么实际上我们只有一个屏幕,那么实际上我们的剩余空间是多大呢?

我们来计算一下。

1 – 3 = -2

本来有一个屏幕,我们需要三个屏幕,那现在就是负两个屏幕了吧?

那么这个时候我们再计算,红色区域它的权重是2,然后黄色,蓝色都是1

那么我们红色分配剩余空间的比例就是四分之二

实际上就是:1 – 2 *(2/4)

就是说我们的这一个权重它是分配这一个剩余空间的(-2)那么是负2个剩余空间,本来是1加上剩余空间,那么现在是负二个剩余空间,所以是1 – 2 *(2/4),那么这个时候等于多少?是不是等于0?

所以说我们的红色区域它实际上就是0.

那么我们剩余的两块空间就是 二分之一 二分之一 (看一下模拟器)

所以说最终显示出来的效果就是这个样子。

所以说我们的这个高度如果都是match_parent的话,那么我们权重是需要进行一个计算的,所以说我们在开发过程中一般不建议这样用,一般怎么用呢?

一般我们会把高度全部设置成0dp。

那么这个时候显示效果就是完全按照权重的这个比例来分配的。写几显示的比例就是几。(红色给个4实验一下)所以在开发过程中一定要注意。尽量使用0dp去和我们的权重去适配。

强调:

这个地方我们还有一个东西需要强调。

就是因为我们的这个linearlayout这个容器它的orientation,目前是垂直方向的。

所以说我们现在的权重对应的是这个高度height。

那么如果说咱们把这个方向改成horizontal

咱们的这个权重就得去针对这个宽了。所以说这个点是需要注意的。(改回来,改成vertical)

大家去练习的时候,按照这个文档的步骤,高练了,宽也要练。各组去研究一下。当然不局限于自己这个组。合作就更好了。

最后:

那么最后我们的这个分割线,(打开图片看一眼)除了用这种形式来设置,其实还有一种形式。

我们直接通过view绘制。来试一下。

宽度match_parent

高度 1dp

然后给个颜色background

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值