00:01
现在我们一起把上一次课学的东西给他复习一下。上一次课呢,我们主要讲了几个方面。第一个。常用的UI布局。第二个。啊,常用的一些视图标签的一些属性标签。啊,这个是我们list view的一个使用。下面给大家介绍一下样式和主题啊,这个呢,重要性不是特别大。啊,最后是我们练习。啊,前面的几个呢,都是大家重点需要去掌握的。所以说大家应该把重点的时间呢,都发在这上面。啊,最后是我们练习,每一天的练习呢,那肯定都是重要的啊。啊。下面我们来看啊,你要跟着我的思路一起走啊,我们来想一下,我们昨天学了几个。Nice。
01:00
有什么呀,线性布局叫lay out,嗯,把它变成红色了啊。嗯,信心布局。好,第二个相对布局叫relative layout。啊,相对布局还有一个。真布局是吧,真布局我们要取个名字叫frame。啊,正布局好了,每一种布局呢,都有自己的一个特点,我们来说一下线性布局,它的一个最大的特点就是看呢。都是用来控制子不的,首先来说对吧,主要是控制的方式。
02:01
线性布局,它是以水平或者是垂直展示的方式来去控制。我把这一个呢给他拿过来。好,下面相对布局啊。它也是用来控制子U,但是以相对定位的方式来去控制子U的一个定位。啊,它里面呢,属性特别多,我们等会再慢慢一个一个说啊,再一个是真布局,真布局呢,其实最最简单的一个布局。它这个地方主要是每一个子又都代表一个什么画面,而且它后面出现的画面呢,会什么。
03:01
覆盖前面出现的画面,就后面出现的。会覆盖前面出现的,它是一层一层叠加的一个效果。这是这一个,还有一个,因为它里面呢,属性不多,我们专门把它说完得了。他这个孩子的定位是怎么个定位法呢?在这地方主要就用到了一个属性叫layout gravity。大家看啊,我这个lay的gravity是放在frame lay的身上呢,还是放在谁身上呢?是不是子view啊,通过子view的这个属性。来指定指示图的位置。大家知道这个意思了。其他的关于真布局的就没有什么太多别的啊,主要就是这个属性。
04:00
好,下面我们重点来看一下常用视图标签的一些属性,首先我们要对它进行一个分类。大家看啊来。嗯,视图的常用属性。再有一个啊,我给它分为三类吧,再呢,专门针对只针对。只针对啊,譬如说我们的相对布局的,这是一种,还有第三种,嗯,只针对什么呢?线性布局的。啊,好了,来视图的一些常用属性,我们可以这么来看,首先是这个表里面的。都是特别重要的,大家需要去重点掌握。啊,有什么ID啊,宽度啊高度啊,文本文本大小啊,背景啊,这个背景强调一下,既可以指定背景颜色,也可以指定什么。
05:04
背景图片啊,再就是我们的layout gravity和gravity它们的区别。大家一定要非常清楚。好,把它拿过来。这是一个还有。来看着啊。下面是两个比较重要的,内边距和外边距。我跟大家说过,这个两种属性是所有视图都有的。有很多同学就是产生了一种错觉,就是总觉得他们是相对布局才有。啊,不是的,所有的视图都会有这样的一个两个种属性,内边距和外边距。而且他们前面开头的地方都是有共同点的来。
06:00
看着我。我把这个等一下。啊,功能在哪呢?就是这个地方用的是什么。Pending对吧,开头,而这一个呢。Marin。好,我们把它呢给。复制过去让大家看到啊。好,下面呢,我们来看一下。只针对相对布局的,我们可以把它呢又分为两大类,一个是相对于兄弟视图来定位的属性。在这里面呢,又可以分为两类,一个是同方向,一个什么反方向,除了相对于兄弟视图的,还有一个相对于复视图的。相对于负视图的又有两类,一个是啊,与父亲同方对齐的属性,再一个什么?居中对吧。先分好类啊。
07:00
这些属性呢,才好进行分类记忆。这是一个相对于兄弟视同的。来,下面还有另外一个相对于复视图的。嗯。好,把它整过来,嗯。这是这一个,大家需要去把它搞清楚。下面只针对于线性布局的,还记得有几个属性只针对线性布局啊。啊,两个。一个是看它方向,一个是什么。拳头啊,Wait。来把这两个给他复制一下。重点我们说一下权重方向很好,很简单,一个垂直一个水平,对吧,主要说一下权重。
08:06
关于权重的,这里面已经说的很清楚了。大家需要的就是去。测试一下。我们这个上面的一个说明。嗯。我就不一个一个再去跟大家去说了啊,已经说的很明显了,大家自己看。下面我们说一下list view。啊,关于list view呢,啊有几个,第一个是理解定义啊都行,第二个就是使用第三个优化。嗯,我们应该来看,先看对list view要有一个基本的理解啊,那我们来翻到这里边看一下。在这,嗯。
09:00
这里面呢,是关于list view的一些比较重要的说明。我先呢把它截下来。啊,在这里面啊,大家要知道你它要显示一个什么样的效果,对吧,可以滑动的啊,多个item。啊,他呢,跟别的。布局、油料不太一样。他在布局文件中是没有标签的,对不对。那怎么样给它设置指示图对象呢?通过谁对吧。那这个里面就涉及到两种类型,一种是显示列表,一种是更新列表。如果你显示是set。对吧,如果你是去更新列表。那这个时候操作的人就不一样,你看它我要显示列表是通过list view去操作的,那我要更新呢。
10:02
是adapt呀。这地方大家需要去知道一下啊。好了,还有一个这一个这个里面的这一个图,你看着好像很简单,但是挺有用,它基本上告诉了我们去写一个啊列表啊,涉及到哪些东西,一共有四个。你。Item layout,也就是说需要有两个布局吧。一个整体的包含list view的整体的布局。在item的布局。啊,这个是一个数据集合,这个集合。外围什么类型呢?啊,可以是list,其实也可以是,对不对啊,List内部什么类型呢。这个不好说,看是你用的什么,你用的什么了,对不对。啊,可以是卖好,也可以是一个我们自定义的对象吧。
11:02
中间是我们的adapt,什么叫适配器?大家应该知道啊,它就是相当于把我们的数据和某一个item布局给它适配到。List view里面去吧。嗯,好,这一个图大家是我们周末的时候要给大家画的一个图。来把它放进来,嗯。啊。对它有了一个基本的理解,和下面说使用,其实使用主要是它里面有不同的adapt。对吧。来。因为我们现在一看到要显示个列表,是不是你又点set带回来就可以。关键是这个团什么问题?来,先来看第一个,最简单的是什么?A real that,那它用来干嘛呢?
12:01
显示一个显示简单文本列表。是吧,好,还有什么,我们来看一下。Simple啊,它呢,显示的是一个。复杂的列表。那复杂列表它的每个item是不是可能有多个视图需要更新呢?啊,复杂的列表来。好,下面啊,还有后面我们在真正的开发中啊,基本上用的都是什么呢?Base that用的最多。再一个呢,它也是去显示一个复杂列表。但是你说他跟他们有什么区别呢?它是一个什么。抽象的类。
13:00
对吧,这是一个抽象类,那也就是说我们必须得去写一个类,去继承于它吧,你就去实现它,这是个抽象的类。啊,上面是不是都是实现的呀,好,它的这个实间呢,还一个是很重要的就是构造方法的问题。它的构造方法我们来看一下来看啊。如果是adapt,它的构的话是这样子的,重点是它的数据。对吧,其实这两前面两个参数是不是都要有啊。Context和resource resource是哪个?Resource?Item的布局资源的resource,嗯,好啦。我们重点是要看的是它,嗯,大家知道它的数据是一个什么样的结构就OK。这里面可以是速度,其实也可以是力的吧,哎,这个T是什么意思啊。
14:06
是泛型呢啊,也就是说我们的这一个数据集合可以是试菌,可不可以是int。其实可以,譬如说我先把实据呢,可以定义在资源文件里面,后面我可以跟大家说啊,其实也是可以的,下面一个它这个数据呢,比较复杂。不知道在哪了,就不在这里。首先外围是一个list没问题是吧,重点是里面它是个什么map map它K了。是street object啊就可以。啊,还记得它是什么的数组。K的速度对吧,那它是谁的数组,ID的数组对吧。你只要把这些东西给搞清楚了,其实我相信大家肯定能写。
15:02
好,下面一个就比较麻烦了。它是一个抽象的类,那就应该有一些抽象的方法吧,需要我们去实现哪些方法呢?有一个叫get can't返回的是什么,什么类型类型。好啦。这个方法得到什么呀,得到集合数据的是不是也那个对象的个数啊嗯。也就是说最终我显示多少行吧。是这个意思吧,好。就决定了显示啊。这显示多少行,显示多少行。好,下面。我们来看啊,继续往下看。下面有一个呢,不是特别重要的一个,但是我还是给大家写一下叫get item里面传的是个int类型的position,因为这个是有时候会用到这个。
16:12
是根据position,就是我们的位置对吧,指定的下标得到对应的数据对象。下面是我们最最重要的一个。它的返回值呢是view,它的方法名呢叫get view,它有一些参数。不知道大家还记不记得。啊,至少你要知道啊,有几个参,有两个参数是大家必须得知道的啊,我这个写的顺序不应对啊,In position。啊,还有一个什么类型的convert view。对吧,这两个大家至少要知道啊,其实还有一个we group叫什么名字对吧?好来我们来看一下。
17:08
这一个方法首先说它的作用,我们用它来干做什么?最终我们在这个方法里面要做些什么事,要返回一个什么东西,对吧。返回。当前指定就是根据这个position是不是返回对应的,行了,返回一个啊带数据的视图对象,Item视图对象对吧?Item视图对象。这个地方,我这个数据,我去找哪个数据了,我是个集合呀,我到底找哪一个呀。是不是要根据position去找啊。啊,记住了,来,我再强调一下,根据position。返回一个代数,返回对应的。
18:05
嗯,对应的带数据的item视图对象,嗯,好,下面我要给大家说另外一个东西,就是它这里面的参数,给大家说明一下,首先position是什么下标对吧?没什么好说的,这个比较简单,下面就是看what了,重点是它它是不是一个可复用的。是item视图对象啊,Item视图对象啊好啦。这个地方那一定它有值吗。注意力对吧,我们这地方要给大家强调一个事情,就是。可可能啊,为空对吧,是不是也可能有值啊啊。
19:02
为空或者是不为空,我们来说一下,分别去对他们去说一下不为空,那如果为空说明是不是没有不用的呀。没有可复用的,那我们得做什么事去了?那就说明我必须得去加载一个新的布局文件吧。啊啊,我们必须加载一个item的布局文件。俺并父子给。给谁呀?是不是看what you啊?那好了。那如果不为空呢?
20:00
它不为空,那是不是直接可以使用啊,直接使复用啊,使用使视图对象对吧。啊示一下大家这个要知道啊。好,我们有可能是自己加载的布局文件,也可能是复用的,后面怎么做来着。是不是要给他找到他对看到在这里面我们可复用item对象,我们后面都需要做同样一个事。做什么事了,找到哦,View,这是一个找到对应的数据就是干嘛。是不是设置数据啊,把数据设置到主view里面去吗?不最终就显示出来了吗?啊,设置数据啊,设置数据有问题,好,这是说的是convert of view下面这一个是谁呀?这个应该它也是能够比较好理解的parent,这个parent是读谁。
21:11
对于我们当前是不是就是指的什么view?是这个意思吧。啊,大家一定要把它呢给大家搞清楚啊。下面啊,还有一个问题需要跟大家说一下,就是。给list view的item设置监听,这个是经常会用到的。啊,它这里面呢,有两种监听。一种是I什么的,什么点击监听,OK,还一个是I什么的,长按监听。
22:06
还记得怎么设置的吗?首先拿到list view是吧?点set on item listen。可以吧,好,里面传一个什么listen了呗,啊,根据他需要的一个类型去传就行好。下面。有一点点小改动,On什么艾吗?No,可可。能看出来吧啊。啊,下面啊,这个地方说优化啊,优化主要其实上面已经说的差不多了,我再跟大家强调一下,首先我们要知道,如果说我有1万条数据。对吧,我数据非常非常多,那是不是内存里面就会有产生1万个convert view对象呢?
23:03
是吗?我是会去加载1万次布局文件吗?也不是对吧。我们前面说过一个是它加载多少个呀。N加一个对吧。嗯。大家看啊,内存中最多,首先你得知道这样一个是最多存在N加一个什么convert view对象,我那个convert view是不是我们平常说的item的视图对象吧?嗯,那也就是说我们只加载N加一次布局文件吧。因为你加载一次布局文件,它就产生一个convert view对象。是这意思吧?啊,这个先你得知道这样一个是。啊。
24:00
那。如果它已经存在了这样一种情况的话,那我怎么样去利用它的这一个特性呢?其实我们就要去判断一下convert view,要等空的时候我才去加载布局文件嘛。这地方只有当convert you,为什么那十才去加载I的?布局文件其他时候我加载吗。不加的。现在我们所做的这个事了,已经是一个很大的进步了,大家看如果我不做的时候会出什么问题啊,大家还记得不?是不是在我快速不断的滑动,不断的滚动的时候,它是不断的加载啊。那时候就出现了一个内存溢出的异常吗?
25:04
但是一旦我做了这一个判断的时候,还会出现吗?不会出现了。因为内存的占用的大小是不是一直没变化呀,总是N加一个再来循环的使用吧。那肯定不会。啊,现在我们做的这个优化还只是一个初步的优化,后面我们再说怎么样进一步的优化啊。下面是关于样式和主题。现在看这一个呢,不是我们重点的部分,但简单的跟大家说一下来第一个样式。啊,第二个是主题,首先来说什么是样式。你要知道什么是样式。怎么去描述啊?
26:00
或者说你知道我们为什么会产生样式这样一个概念呢?啊。首先我们做,我们回想一下我们上一次做的那个功能,我们上一次做了一个界面,就是左边是不是有一个星星呢?啊,右边是个文本。对吧,然后下面呢,是不是跟上面的结构一模一样啊。啊,这个结构都一样的,只是有一个东西不一样,文本不一样,其他的都一模一样。那我们要做写一个标签的时候,是不是要写很多属性呢?当我去写标签的时候啊,有很多属性是重复的。对吧,是相同的。此时我们就可以把它什么。把这些好几个属性给它抽取出来吧。定义成一个什么?There。那也就是说样式是多个啊。
27:00
视图标签属性的集合,这是一个集合体,它里面包含了多个属性吧。那主题怎么样去说呢?其实很简单,本质也是什么style好,那为什么还分为样式和主题呢?这个地方要说几个事啊,首先我们有几个目标啊,一个是好处是什么,对吧?把这个先说一下好处,还有一个就是目标。就是我重要的目标是谁对吧,现在说它的好处是什么?是不是相当于复用,复用谁呀,复用了什么东西。是不是复用标签属性啊。对吧,好,那他针对的目标是谁呢。
28:03
是布局文件中的什么呢?是不是视图标签对吧。还记得四周标签怎么样引入样式吗?通过了用什么属性?Style样式style一个属性对吧?啊,这个大家不用记了,好了,下面看到你说那个主题的,它的好处是什么。其实也是一样,也是复用什么标签的属性,因为它本质也是style嘛。啊,所的好处是相同的,就是目标不一样。那目标他的目标是谁呀。整个应用啊,或者是什么,是不是activity啊,只是我们在哪个里面引用呢。是不是我们功能清单文件,也就是我们manifest文件对吧?啊啊配置文件吧,功能清单文件。
29:08
美女们。啊,这个大家适当有一个理解啊。好,后面呢,我们做了两个练习,这个练习倒其实并不是特别难啊。一个是显示我们所有应用的一个列表,这个是也是我们手机微视里面的一个功能。后面呢,去显示我们手机卫视的主界面。啊。我就说一下啊,这个做做练习的时候呢,还主要是把前面的知识呢,进行一个基本的一个使用。大家解一下啊。
30:01
在这里面,首先我们还是要把应用啊编写。啊,实现完成,嗯,完成。呃,去什么呢,实现。应用功能的流程,应用功能编码流程吧。这个大家还是要要把它给掌握了,就是去写一个简单的应用,大概的流程应该什么样的,还记得吧,先写什么。是不是鲜血布局啊?就说白了,还是按照我们前面想法,先是外观,接着才是什么行为对不对。啊,外观大家说有时候啊,现在跟我们不太一样了,以前外观只需要有什么东西就可以了。以前要有一个外观。以前有外观是不是有布局文件就可以了啊布局文件那这一次。
31:04
就不太一样了。如果你是list view,如果你是great view。那里仅仅有一个布局不够。对吧,你是不是还得使用我们的adapt去动态的去显示啊,而且还要去读取数据吧。啊,在这个地方啊,外观啊,可能简单的就是一个布局,但是我们后面涉及到读取数据啊,怎么定义adapt。对吧。啊,接着才去去显示列表。这样我们就实现了,我们啊想人看到一个基本的一个形状啊,一个外观下面才是什么。是不是行为啊,行为一般从什么出发呀,大家说。
32:02
对,设置事件监听其实都是固定的啊,设置事件监听大家一定要把这种基本逻辑搞清楚,行为嘛,不就是你对他操作他有响应吗。对不对,那你在点击之前,你是不是要给他把它监听设置好啊。对吧。就是一个设置监听,并在回调方法中。做出响应,对应的响应,那至于是什么响应,是什么监听,就看实际的情况了。也有可能是点击,也有可能长按对吧,甚至有可能是别的,随着我们学习的深入,我们还有别的监听。但是不外乎就是这样的一个基本的流程。大家一定要把这个最基本的给他搞明白了,后面就去按这个流程来去套就可以。
33:01
好在我们当前的这个里面啊。嗯,还有一些什么,大家需要去重点关注的,大家看啊。啊。这个里面我们需要去做行为做它的时候好像,嗯,比较重要的可能是初始显示列表和更新列表啊,它的不同的做法。对吧。尤其是更新列表。啊,我们是不是要做一个长按某一个item去给他移除啊。诶,我是怎么去做的啦。有几部呀,还记得不?啊,两步,那你们说一下,我找个人说一下啊,我要把这一个某一行给他移除,分为哪两步。啊,先接近一家上的。找个人啊。呃,张鑫。
34:07
给你四分挺好啊,同学们。一个是数据集合要更新对吧?啊,我要把数据给他移除,接着才是通过adapt去通知更新吧。这一点大家需要知道,因为这个用的特别多啊,就是更新界面,更新列表是用了非常非常多的。嗯,要说还有一个的话,我们这里面用到了一个great view,其实great of view的用法跟我们list view它基本上是什么。是不是类似的?啊,只是说在写布局的时候有点小不一样而已。大家把great of you它的一个基本的用法。的基本使用也需要去关注一下,其他的倒没有什么啊。
35:00
如果你能把我们的列表给做出来,我相信你做后面的这一个应该难度不大。好。这是我们昨天的一个全部的知识,请下来啊。
我来说两句