即使是大家是一个非计算机专业的学生,将来你们去使用一个App时,除了去用这个应用功能的本身,也尝试着把我讲的内容跟的使用的App去结合起来,看跟哪些概念能够形成对应。这样你去做交互的创新或者产品的创新也会更有感觉。

对于Android的应用, Android平台在Linux内核上增加了Java虚拟机,Java虚拟机之上又提供了一组开发框架供我们开发者使用。这组开发框架就提供了描述Android应用中核心组件的抽象概念。首先它们是一种抽象概念,帮我我们去理解Android应用,同时它们又是具体的类和代码,是可以拿来在代码中复用或者调用的。

Clipboard Image.png

应用呈现的一屏:Activity

第一个概念就是Activity。当你在Android手机上看到的一个屏幕,就是一个Activity,翻译成中文可以叫做活动,不过通常我们都直接称之为Activity。我们去浏览一个App的时候,会在这个App进行来回的跳转,比如打开微信,看到的第一个屏幕,是一个显示消息列表的Activity。选中其中一项,点击之后会进入另一个屏幕,这个屏幕是和具体的人或者是在一个群的所有聊天记录。点击返回按钮我们又重新回到第一个Acitivity(启动时的消息列表屏幕)。所以Android App简单的看,就是Activity以及Activity的跳转。

应用屏幕之间的跳转:Intent

Activity之间的跳转,通过Intent这个概念来描述的。当用户进行了某种操作触发了跳转时,Android系统会根据Intent的设置跳转到特定的Activity。

Clipboard Image.png

而我们开发者就是要去把这些Activity和Intent描述清楚,此时你是一个开发者,你需要通过编写程序来告诉Android系统,Activity长什么样子,如何处理用户的行为,如何进行跳转。

Clipboard Image.png

Activity的来回跳转是通过栈来维护的。栈计算机科学中的一种数据结构,类似于一个队列,队列中的元素先进来的就要后出去,同理后进来的就要先出去。把栈竖起来看的话,当前屏幕对应的Activity处在栈顶, 返回前一屏时,当前Activity就会被移除出栈,最近访问的那个Activity成为栈顶。

Clipboard Image.png

每一个屏幕的界面:View

接下来一件重要的事情是在每一屏中显示什么东西给用户看。还是看微信的例子,启动后我们看到屏幕中有一个消息列表,每一项左侧是一张小图片,右侧是聊天的人的姓名和最新的对话。我们如何才能构造出Actvity的模样呢?Activity的模样在编程和设计领域称之为UI(User Interface)。这时候我们就需要了解View这个概念了。

Clipboard Image.png

Android的UI具有一种树状的层次结构。Activity首先是包含了布局Layout,Layout也是一种特殊的View,用面向对象编程的术语说就是Layout是View的子类,顾名思义它定义了内部的各种元素如何排列。Android框架给我们提供了很多布局方式,比如线性布局、相对位置布局,这里不详细展开。

Layout里面就要排放具体的View组件了,比如让用户输入文本的输入框,显示一段文字的标签,或者是包含了其它组件的容器(称为ViewGroup)。所以这样一层一层的包含就构成了一个树状的View层次结构。

比如说这是一个邮箱的应用,这个Activity中首先会有一个Layout元素,Layout中包含了一个ListView,ListView是由包含一组并排元素的容器,它中间的每一个元素是一个ViewGroup,内部包含一张图片,邮件的主题和邮件的摘要。而我们要做的就是明确了这个层次结构之后,通过编写程序把这样的结构描述出来。这就要求我们熟悉Android的API了,我们要知道Android平台提供的概念和接口,通过Java代码或者XML代码的方式把UI构造出来。

Clipboard Image.png

界面中如何显示数据:Adapter

我们已经知道Actvity表达屏幕,Intent表达屏幕之间的跳转,通过View来描述Activity的UI,但是UI不是冷冰冰的一组元素,上面呈现的是动态的数据。如何把数据传递给View呢?这时需要了解一个重要的概念Adapter。

Clipboard Image.png

继续这个收件箱的例子,把收件箱的UI构造出来之后,如何告诉它应该显示什么数据呢?不妨假设这些数据是存在数据库中得,我们给出一个简化了的数据库表的设计。不懂数据库表也没关系,把它想象成存储在Excel中得数据就行。

数据中包含发件人的名字、发件人的头像、发件人的消息。我们需要编写Adapter的代码,首先拿到这些数据,然后告诉Activity其中哪个组件显示哪部分数据。比如收件箱Activity中展示图片的ImageView需要显示的是从数据库中获取到的图片。这样通过Adapter,View和数据就连接到一起,能够呈现出最终的UI界面。

登录发表评论 注册

反馈意见