00:00
先我们来一起把昨天学的东西给他复习一下啊。那昨天呢,我们主要是讲的啊,UI的上部分。第一个是关于UI的理解啊,第二个呢,我们学了一些常用的UI组件。包括简单的UI组件,菜单,进度条,对话框啊,就这几个来,我们一个一个看,先来看UI的一个理解。啊,这里面呢,我们有几句话。这里面每一句话呢,都是比较重要的。这里面重点说一下,我们的UI呢,是由V和v group组成的。那view和view group呢?他们是什么关系啊?父子关系对吧,那。这个地方他们承担的角色呢,就不太一样,那一般的view,它是用于显示一个界面效果吧,显示一个样子出来,它有一个概念叫内容绘制,就是显示一个文本,显示一个图片。
01:10
好,那view group它虽然是也是一个view。这个没问题吧,但是它的作用完全不一样,它本身能显示什么东西吗?不然。它专门用于控制指view的布局,也就是说view group,它里面是有一些指view,或者甚至于紫V是不是都有可能。那一般的view的下面还有孩子吗?是没有了呀,嗯,这个大家需要去知道啊。把它呢,给它拉过来。嗯,这一部分是比较重要的,我们把它调成红线。
02:00
好,这是一个下面一个就是关于啊,这个里面的API的结构呢,大家需要去看一下就OK啊。我把重点说一下他。理解UI事件,它这里面呢有一个模型。这个模型呢,需要大家理解,包括左边说的事件是什么啊,谁是事件源,还有谁是事件监听器。啊,这个里面可能他比较理解,谁是世界缘呢。谁是应援?这个思源指的是谁呀?视图对象对吧,这里面强调一个东西啊,我说的是视图对象,肯定是个对象。啊,平常我们啊,可能简洁说视图对吧,视图呢,我们平常可能简单说视图,实际上指的是视图对象,再一种叫视图类,这个要区别开来,那你在想啊,我们是操作一个视图类吗。
03:05
不是吧,是某一种视图对象吧,对不对?嗯,这个事件源指的是视图对象,大家要搞清楚这一个事啊。好,我把它呢,给它截下来啊这个。是我们周末的时候需要大家去画的一个图啊。其实我已经,我感觉我太仁慈了。R。来。有的同学说你反正开卷还要还要提啥对吧。来。那我们可以给你整B卷啊。啊,大家需要去把这个世界模型呢,给它理解透。这东西都不是靠背的,主要关键你是理解了,基本上你就背住了。好,下面一些啊,还有一个来看它,嗯,这里面呢,Android里面提供的各种各样的监听器接口。
04:10
我们比较重要的是我们已经学过两个了,一个是点击一个长按。啊,后面我们还要学一个重要的就是touch触控。那时我还跟大家说过,触控有几种类型呢?几总。啊,三种。当物和什么?二啊,这个大家先有一个理解以后呢,后面再学的时候就好一点。啊,重点给大家总结一下这个规律,我们所有设置监听的时候都是view点。On,什么什么listener,传一个listen的对象。你也有了它,其实还是挺有用处的。就是我们设置监听基本上是这样一个方法。
05:00
进行,变来变去都这样的。大家需要去看一下啊好,这是这一个关于UI的理解啊,相关的。下面说一下常用的UI组件啊,这里面呢,我们分为了好几种去说啊,简单的。菜单进度条对话框啊,其实还有别的啊,只是说我们暂时呢去用这些。啊,其他的接触到了我们再说。好,我们来看一下。啊,在这里面呢,主要说第一个简单的component。好,第一个是我们的text view,来,我们把它写一下吧,先我们自己回顾一下上有哪些。第一个我一个我们先写出来啊,Take of you,这是一个,这我们叫它什么呢。文本视图对吧,好后面。
06:01
还有什么,来我们来看一下第二个,那它叫什么呢?叫可编辑的什么视图啊,文本视图,它其实也是一个文本对吧的视图吧的文本视图,呃,上面相当于就是什么,它是不可输入不可编辑的呀。啊,好了,来继续往下,还有什么啊,Button button,我们可以叫它什么呀?按钮,这是我们非常常见的一些啊,空间下面一个。啊,Imagine you是吧?Imagine you,我们加了什么呢?图片视图好,下面第五个叫什么呀?Check box check box什么多选框对吧?啊多选框好最后啊叫radio。
07:09
诶,好像有点不对啊啊radio group加什么radio button就他们呢,一般是同时存在的啊radio button它用来做什么,是不是单选呢?啊单选框好了吧。好,来。下面我们来看它,首先来看text you。它呢里面啊,主要是我们怎么样去写布局的问题,怎么样去写这些标签。在这里面呢,涉及到很多我们常用的一些属性,这些属性基本上用的非常非常多。大家必须得掌握。好,我来这样啊,我也不写了,嗯。直接截个图得了。
08:05
来看一下啊,在这个里面给大家说一下。啊,前面五个是大家需要重点去掌握的,第六个呢,倒用的少一些啊。好来,我把它呢这样写一下。这里呢,大家需要能够看的清楚一点就行,好下面一个输入框。输入框里面呢,有两个重要的属性,一个是hint,一个是input time。呢,它是一个提示,这个提示它有什么特点呢。这对吧,他是不是你在没输入之前是显示一个灰色的文本吧,那你输入还在吗。它是不是自动不在了。哎。这个功能还是挺强大的,其实我们也没做什么太多的事。这是别人的封装的好嘛。就是这样的两个属性啊,下面是button button其实没有,暂时来说没有什么特别的属性,我们还知不知道八是谁的子类啊?
09:12
啊。Text view的指令。还记得吧?这个它比text又多了什么呀,是不是多了背景图片呢?啊,它跟大家提个概念,叫它指定它是不是我没有按下的时候是一个图片吧,我按下去它是不是又显示另外一个图片,我们那时候叫他什么呀。还记得吗?有一个概念叫多状态图片。它是一个复合图片,当你没有按下的时候,显示一张啊,按下去了显示另外一张啊。好,没有特别属性,那我就不写了,下面看这个imagine imagine view呢,它有两个比较重要的属性,经常会用到。一个是background。啊,背景图片。
10:01
啊,这个背景它除了指定图片,还可以指定什么呢?是不是颜色呀?嗯,Src叫什么呢?前景好,这里要跟大家说一个是。假设。我有两张图片。一个呢,这两个图片都这么大。可以吧,我的视图这么大。可以吧,好了,现在我把这个呢是图片一,这个是图片啊,我把一指定为背景图片,你说会显示个什么效果。它是显示的,呃,还是原样的大小呢,还是跟视图一样大。啊。背景,你想想看,他要成为我整个视图的背景,对不对?无论他以前多大,是小还是更大。最后都跟什么视图一样大?能理解吧啊。这个前景图片就不一样了。
11:01
那前景图片它有可能是原样大小,也可能是充满,我看我我跟大家说过,它里面有一个属性的缩放的类型,不,我们类是指定为fair尔,还记得吗?贝塔XY吗?如果我指定它,那就有的是不是充满F轴和Y轴了,就跟那background是不是效果一样呢?嗯嗯。而且大家想。啊,你说我画我我要显示这个背景图片和前景片,你就先显示谁和谁呀。先画谁还要把它画出来?对吧,是不是先画背景啊,画完背景画前景对不对,那如果前景那个图片比较大的话,是不是就会把背景图片给他什么。是不是不该呀?这个能理解吧。好,这个大家先有一个适当的一个理解啊,下面。这个在布局文件中去指定图片,叫静态的一个指定。
12:02
下面我们经常会用到的是什么呢?动态指定图片。对吧,这地方就分指定前景图片和什么呢,背景图片这几个都用的比较多。把他们拿着。嗯,就这个大家需要去知道啊。好,下面是关于check box啊,这个box倒并不是特别难啊,来看一下check box。多选,那多选的时候,大家看到它唯一多的是可能多了这样一个属性叫check的属性。是也就是说我默认显示的时候,我如果不加单默认那个check是选中了吗。肯定不是对吧。如果你希望默认选中,那你就需要去加吧。
13:03
对吧,这也是一个静态的指令,那如果我动态的希望某一个check box选中或者不选中,需要调用一个方法。是不是三这。啊,那他还能去除了设置,还能去读它的状态。就当前到底是一个选中还是不选中的呢。E check。哎,这两个方法是不是相当于它应该有一个属性呢。不型的属性吧,如果你有一个不型的属性,你提供set get方法,有有get方法吗?不行的属性有get方法吗?啊,我写一个private,写一个类型啊,写一个写一个什么呢,比如说。就是is check吧,啊,随便写一个,你说我要通过eclipse去帮我生成对应的set方法。就可以生产吗?
14:00
那你说它会生成get is check吗?或者或者我这样写啊,你们要觉得一字多余,我这么写。你觉得它会生成get的方法吗?会吗?大这个不知道啊。天哪。这咋整的呀?你没注意吧,不是不知道。视频咱就没注意过啊啊,随便写一个吧。譬如说我在这里面写一个布尔类型的值,对吧,不类型的值啊,随便写一个啊,譬如我就写个A,我也不代表什么意思,好吧,来。嗯,能看到吧,根本就不会有get的方法吧。对不对啊,这个地方你就能看到他。是不是相当于对应的某一个属性的set get方法呀。
15:00
嗯,它就应该有对应的一个存变量呗,对不对,嗯。这是这样,一个是大家需要知道下面一个就是设置选中状态改变的监听,这个我们后面会反复的用到啊。大家需要去注意一下。好把它呢,给它写一下,嗯。啊啊,就差最后一个了,最后一个了,我们来看一下它,它呢跟我们的大家看到啊,我们现在说过它实际上什么类型还记得不。它是什么类型的?它父类是谁?没呀。那也对啊,不是不对,但是不准确。啊,大家看到这里,这里面有一个属性叫horizon。啊。或者你说他是个什么属什么不行水啊线性布局啊,是不是你尿的out腿啊啊线性布局大家得知道这一个是啊。
16:27
嗯,好了,这是我们啊最常用的一些简单的UI组件。下面我们要说一下,简单说一下菜单,还记得菜单有几种类型,谁要知道啊,一种是叫warm me,叫选项菜单对吧,还有一个这context value怎么说呢?上下文菜单对吧?那你大家一定要知道选项菜单是在哪显示。
17:01
是不是在这底部啊,对吧,而上下文菜单呢,是不是在正中间呢?啊显示一个列表好。关于它我记得,嗯,大家主要是记住两个三个问题来去分别去想它就行。这里面呢,我就不在一个墙上,因为用它呢,不算是特别特别多啊,我就把这一个复制过来就得了。啊,先看选项菜单。就是这一个,还有一个呢,是我们的上下文菜单。我们都是从这三个方面去看,哪三个方面我都会跟大家强调一下来。第一个呢是如何来触发显示。
18:00
啊,第二个是如何向menu里面添加item。好,我问一下menu和item它们有什么区别呢?譬如说我在下面啊,我我就以因为我那个手机没起来,我就画一下吧。看到啊,假设我有一个选项菜单是吧,整个它叫一个菜单。就整体叫一个菜单,这里面是不是有有好几行啊,每一行叫一个,什么叫一个啊,这个地方大家一定要区别开来这个。啊,第三个呢,就是我选择某一个item,它是不是有对应的响应吧。这就是这样的三个问题。我们呢,分别通过一些回调方法来去实现我们的功能。好,这是这一个,下面一个呢,是关于进度条的。好,我们来看这里面金条呢,我们也说了有两种类型,一个叫progress啊,还有一种它的子类吧,是它的一个子类啊,特别的啊,这个是我们重点需要掌握的那个S倒用的不是算特别多啊。
19:21
好。先来看一下SPA。SPA呢,它又分为两类。啊,大家还记不记得一个是啊水平的啊或圆形的吧,先写一个圆形的,这是圆形,它是不是假的呀?还一个是什么水平了对吧,好来。那我如何来指定一个圆形的,如何来指定一个水平的呢?啊,这个倒不是需要大家太记啊,主要是再去托。设置这些标签的时候啊,是不是有这个样式啊。
20:03
这个大家需要去知道,一个是圆形的,一个是水平的啊,还有一个。看这里它有两个特别的属性,一个是当前进度,一个什么呢?最大进度。对吧。这都是一些静态的指定,我能不能通过中动态的去指定它们的大小啊,是不是可以啊啊,如果说你需要去动态的设置它的大小,或者得到它的大小都可以吧。嗯,同时我给大家介绍一个视图的显示和隐藏怎么做。这个也是用的特别多。大家需要去把它重点的看一下啊,把这个呢给它截下来啊。嗯,这是一个圆形的。
21:01
啊。下面呢,下面一个是一个啊水平的。下面就是如何来动态的去设置,动态的去获取数据啊,它的一些API,这个也是比较重要的部分。把它留下来。以后大家可以放。我们用到了就是这样一些一些方法,好了,还有一个呢,就是关于S8 S8呢倒不是我们的一个重点,但大家需要去知道啊,怎么样去做。这里比较麻烦的地方在于哪呢?在于这里面他要需要可以去设置一些监听。啊进度啊八的进度改变的监听,它里面有三个回调方法。
22:07
包括从按下到滑动,最后到离开啊。大家能看到我这里面都是一个黑色的啊,所以说它的重要性呢,不算特别大啊。如果它比较重要的话,我会标一些颜色。啊。这是我们的进度条最后一个对话框啊,对话框的这个呢,来首先我们还是来看一下有我们说了哪些啊,有几个先说一下啊,就是对话框API结构要先大家知道好了,后面呢,我们会说到一个叫alot dialogue,还有一个叫progress dialogue啊,其他的都大家先可以暂时不用管它,好先来看一下API的整个结构。
23:07
API的结构呢,是这样一个是意思,大家看到有这样一个基层结构,大家需要去知道。好啦。下面一个就是a lot dialogue。而那dialogue呢,我们又分为了好几种类型,一个来说叫首先第一个是一般的,这是一个,第二个嗯,自定义布局的,对吧,定义布局的还有一种。是不是单选带单选列表的对吧,带嗯单选列表的这三种吧,这三种呢,都是我们在手机微视里面要用到的。
24:02
也就是说这个里面。大家需要去把它。咱们去看一下还有它啊,它也是我们后面要反复用到的。啊,来看一下一般的这个里面如何来显示一个,带我来看一下。啊,这个里面比较怪,跟以前呢可能不太一样,因为我们要去整一个单位,一般我们是不是先溜一个对象啊。他是不是也有修方法啊,但是。他的个号我们能用吗?不能用不了,那用不了,它提供了另外一种方式,其实它这里面是一个设计模式啊,叫构建器模式。他为什么要这么做呢?大家想我们去,我们是这里面是不是要去设置很多的数据啊。啊,设置很多数据,我我有可能。那个TITLE1定要设置吗?
25:02
不一定吧。不一定要设置,包括我的message,包括我的这些是不是都有可能设或者不设呀。对吧,那你得想,如果他是通过构造方法的形式来去做的话,他得怎么做。他他要通过构造方法的形式去设置这些数据的话,你说他怎么做。他要写很多很多的构造方法。因为你有各种可能性啊。P说我有我有五个啊,假设啊,我有五个数据需要设置,有有五种数据需要,譬如说标题,你看还可能还不止五个了,标题嗯,消息。按钮正面按钮反面按钮,这是不是四个啦,还有视图对吧,五个好,这五个你想看我有可能是不是选择其中的一个。那就五种情况了吧。我有可能选择其中两个吧。
26:00
是这意思吧,不可能选择其中两个对不对。那我要选择其中两个。你想想我。我我有五个选择,其中两个,这是不是要要排列组合呀。对不对,那我有可能选择其中的三个吧。我甚至有可能举了其中的四个。这要把它写全的话,它得写多少个重载的构造方法呀?对不对。是不是太麻烦了?能听懂吗?啊,估计有些同学都听不懂。啊,就是在这里面,我不是要,譬如说我有我有我我有我最全的啊,最全的是指定ABCDEF。ABCD5个参数的对不对,我有可能只有一个参数的。对不对,我也可能只有两个的,我也可能只有三个的,我也可能只有四个的,对不对。那这个里面要组合起来,是不是很多个很多种构造方法啦。
27:03
是不是特别麻烦。嗯。那它就提供了这样一种方式,一个呢是构建器模式,一般它的set方法都会有一个返回值,返回谁呢?返回它本身。就是你去我们去用的时候,还记不记得我们在用的时候,大家可以看一个啊。随便打开一个,大家看着点进去。返回什么?This,释放了当前对象啊?那我是不是可以利用这一个特点。去做这样的事。其实我就觉得那个加语言的那个,我们不写个B的时候,是不是S的方法都没有返回值啊。这个设计说不上特别好,说实话。因为你要这么做的话,我要去设置那些属性,我有多个属性要设置的话。那你想,我是不是要写多条语句啊?
28:03
对不对,他如果,譬如说假设他如果设计成这样。那我用一条语句可以设置很多属性。对不对。人说那你改改呗,你就这么做呗,关键是我要这么做的话,那我就用不了这个工具的快捷键了呀。他就不能帮我生成了,我再去改了多麻烦啊,对不对,嗯,如果它自动帮我生成这样,嗯,就挺好了。能改是吧。好,这说的是这样一个是大家需要去知道啊嗯。明白这些东西呢,对大家有一定的帮助。好,下面我们继续来看啊,一般的嗯。主要是涉及到这么一些API,我现在把它复制过来再说。
29:05
嗯,就这些。好。嗯。嗯,这里每个呢都有一些说明,大家自己可以去看,如果你是需要一个啊,单选列表的吧,它有一个特别的方法,我们可以用叫什么呢?下面这一个方法,我跟他,我跟大确认一下。Search single items。就多了这么一个方法啊,我们就能实现一些特别的效果。好,下面一个叫制定布局的。制定布局的,我们来看一下在这里面。它呢,有一个方法叫set you。对吧。啊,设置那个视图,但是它是需要一个视图对象啊。不过我们手上有的是一个什么?
30:01
是布局文件呐。那如何来去动态加载一个布局文件呢?在这里我们有两步啊,先首先是去加动态看到啊,动态加载布局文件,得到对应的view对象。啊,这是第一步,接着才是。是不是设置这个布局啊,设置视图啊,设置view,好了来看一下,先是动态加载,动态加载呢是用的是它。啊,View点这相当于是不是个静态方法呀。好,来。嗯,下面一个叫设置view啊,设置view呢,这个倒是比较简单了,就是我们的view里面有一个方法叫set view。
31:06
把它呢,给它截下来一下。嗯,大学就知道。啊。嗯,我们就先把这个呢说到这里啊,其他的我们就再后面再说啊,下面一个就是进度条的dial。那镜条带路呢,我们又分为两类,一类是什么呢?带的是圆形进度对吧?啊,还有一个是水平进度,没问题吧,好,圆形进度我们想一想。啊,在这个地方就比较特别简单,就是一个方法就搞定,溴方法就可以了。这个。秀一下。
32:01
就OK了,好了,如果你是个水平,进度就稍微麻烦一点点,但是也还能接受。六的话六的方去做,而且要设置一下进度的样式。就OK。好了,其实后面呢,还有两个进度,一个是日期的,一个时间呢,等会我们再说,因为它不太重要。从咱们拍出来给大家说一下啊。在这里面还要跟大家说一个,说几个东西。啊,需要给大家补充几个东西啊。那就当第一个。就是如何来启动分线程啊,第二个啊,查找根据ID。查找视图。
33:00
如何来查找,查找对象吧,嗯,第三个是关于更新视图的。好,我们来先来看第一个,我把这个强调一下。啊,第一个启动线程,启动线程有几种方式。两种对吧,来在这里面,一个是new,一个thread去重写它的run方法,一个是new thread传一个run对象。对吧。把这两个都给它搞清,搞清楚了啊,这个是大家必须得掌握的,其实启动线程也就这两种方式,难道我就觉得你花半个小时给他记下来。都行啊,必须得给他备注。不要写的特别熟练,你不能说写写的用线程,你都有时候出错,那样就不太好了。
34:00
好,下面一个根据IE查找view view对象,有人说这这么简单,还需要另外说吗?那不一定。啊。这里面分为两种情况,一种是查找,嗯嗯,主就是当前界面中的view对象对吧?还有一个呢,是查找某个啊view对象的子view。嗯,这里面两种不一样的地方。啊。如果你是查找当前界面中的某一个view,根据ID怎么找啊?直接调用find of you by ID是吧?里面是不是传ID呀?
35:01
啊,By ID。好了,那你想了,其实这个方法是谁的方法?这个find view BYD是哪个对象的方法?我是不是审了审了认识啊。那就意思是谁啦。是不是当前的activity对象啊?对不对啊,我们是省的类的,平常懒得写认嘛,对不对啊,那下面如果你是查找某个特定的view对象的子view。这个怎么做啊?对象点find view by ID,其实方法名都一样,只是看谁去调而已。这个怎么说呢?我要说一句话,就是你忘了,你写错了不要紧,你就说你有时候经常忘。忘了无不批评你,但是如果说你忘了,忘了以后呢,又找不出来,这就不叫忘了,这叫你根本就不知道。
36:08
忘记谁也可能我也可能忘啊,就有的时候写写谁本来心里知道知道吧,要通过那个view去找。写的时候一不小心就写成翻了。没有加点了对不对。后来出问题了以后,我要马上能去找到就OK。这也是大家在学习过程的一个宗旨,就是你犯错误不要紧,重点是要想办法把那个错误给解决掉就OK了。程序员是在解啊,解决问题,在排错误,在解决异常的过程当中成长起来的。比如说老师,我从我从小到大就没碰见过异常。嗯。我现在已经是牛人了啊,对吧,在整个行业里面也算顶尖人物了,就没碰见过异常。那是不可能的。
37:00
但在牛顿大神他也打盹的时候,他一打盹那就会报错。这个地方大家需要去知道这样一个事啊,也比较重要。啊,下面一个就是更新view,这里说几个问题,第一个啊。嗯,我们只能在只能在主线程啊,或者说这么写吧,要说反面的啊啊,不能在分线程直接。啊,少了一个城。更新界面更新UI对吧?啊,更新UI这是一个问题啊,不能在分线程直接更新到我这里反复强调是直接,也就是说我可以在分线程去间接的更新UI。就本身我这个更新的方法呢,确实是写在分线程执行的。但是我真正内部。
38:00
去更新界面的时候是在什么主线上做的对吧。这个最最明显的例子是谁呢?譬如说假设啊,我们举些例子,To,它能在分线程去更新吗?就它要显示那吗?不能对吧啊,比如啊就tot要啊显示是吧啊但什么呢?譬如说我们的那个dialo progress dialog还就它吗。它可以是在分线程去分析。但为什么他能在分析上更新呢?是因为它的内部用到了我们后面要学的一个对象。叫什么来着,Handler?啊,它能实现啊。我们在分线程,通知主线程去做一个什么事。
39:02
啊叫线程间通信,后面再说啊好,下面一个还有一个。长时间的工作啊,只能放在什么呢?分线程执行。对吧,如果你在主线上去执行这个就会导致用户的操作没法响应了,譬如说举个例子。我这里面有两个按钮,我按这个按钮一的时候,它启动,它没有启动线程做了两两秒钟的工作,在两秒钟之内,你说我还能点它吗。不能。对吧,因为我他要响应我这个点击,是不是要在主线人做个什么事啊,但主线人是不是现在正在干活呀,他还没还没闲下来吧。对不对,他要闲下来以后才能响应我的这个操作吧。这个大家需要去知道啊啊。
40:02
好啦,嗯,整个内容呢,嗯,就这么多啊。
我来说两句