《Android UI基础教程》——1.3节 Android UI基础

1.3 Android UI基础
Android UI基础教程
用户界面(UI)是应用程序和用户之间联系的桥梁。事实上,对于用户来说,UI就是应用程序。Android 的UI框架足够强大,能够创建复杂的带有图形和动画的 UI,同时它也足够灵活,能够从小屏幕的手持设备扩展到平板电脑以及电视。本节介绍Android UI开发的基础知识,通过本节的学习,你就可以开始为自己的应用程序创建出色的UI了。

1.3.1 主屏幕和通知栏
要创建Android应用程序,首先你应该了解基本的Android OS 本身的用户界面。一个Android用户遇到的第一个屏幕是主屏幕(图1.8)。主屏幕由包含应用启动图标以及小部件的滑动页面组成。你可以点击启动图标来启动对应的应用程序。小部件就像迷你的、包含小块数据的应用程序,例如天气或者未读邮件数目。在屏幕的底部是打开电话拨号器或者邮件客户端的快速启动图标。这同样也包含应用程序抽屉的启动项。应用程序抽屉中用网格状的形式包含用户安装的所有应用程序。

Android UI的一个关键组成部分是通知托盘(图1.9)。你可以通过触摸屏幕顶部的状态栏并向下滑动来访问通知托盘。Android在通知托盘中以列表的形式展示所有的通知:新邮件通知、当前播放的音乐、系统状态信息以及任何长时间运行的比如下载之类的任务。点击列表中的通知就会打开生成该通知的应用程序。

注意: 你需要知道用户可能会用另一个主屏幕替换Android的主屏幕。一般来说,这些替代品都会如Android主屏幕一样遵循相同的UI规范。但是,有少数替代品的主屏幕使用完全不同的UI规范,所以在应用程序中不依赖于任何特定的主屏幕功能是个好的主意。

1.3.2 XML 布局
Android使用XML布局文件与Java代码来共同定义用户界面。你可以使用Java来指定所有的布局,但是通常来说更好的方法是使用XML来更好地利用Android的自动资源选择特性。这可以让你为不同配置的硬件声明布局,Android系统将会自动选择最合适的布局。

下面是Hello World应用程序的main.xml文件的代码:

`<?xml version=``"``1.0``"`` encoding=``"``utf-8``"``?>`
`<LinearLayout xmlns:android=``"``http://schemas.android.com/apk/res/`
`→`` android``"`
` `` `` android:orientation=``"``vertical``"`
` `` `` android:layout`_`width=``"``match`_`parent``"`
` `` `` android:layout`_`height=``"``match`_`parent``"`
` `` `` >`
`<TextView`
` `` `` android:layout`_`width=``"``match`_`parent``"`
` `` `` android:layout`_`height=``"``wrap`_`content``"`
` `` `` android:text=``"``@string/hello``"`
` `` `` />`
`</LinearLayout>`

第一行是基本的XML样板,列出了版本和编码形式。这一行始终如一并且一定要包括在每一个布局文件的开头。下一行定义了Android的基本容器类型之一—LinearLayout。这种视图线性地排列其子视图。在下一章中你将会更多地了解LinearLayout。

注意: xmlns:android属性是必要的并且必须在XML的顶层声明。这个属性一直都要有,否则你的资源将不会被构建。

LinearLayout是以线性形式展示多个子视图的简单容器。例如,一系列的项目可能在LinearLayout中以列表形式展现。android:orientation属性声明了子视图排列的方向。在本例中,布局采用了按垂直方向排列,并且所有的子视图也将按照垂直排列。最后,声明了布局的width和hight属性,这是为了能够填满整个父视图(之后会有更多关于这个的讲解)。

在LinearLayout里面只有一个TextView(文本框)。顾名思义,这个视图是被用来向用户展示文本内容的。TextView的text属性声明了要展示在其中的文本内容。在本例中,它引用了一个定义在strings.xml文件中的字符串。Android使用@符号来引用其他资源。你也可以在这里声明一个字符串,但是把所有用户可见的字符串定义在strings.xml文件中是更好的方式,这样有助于之后的应用程序本地化。此外,你可以通过Java代码动态地修改文本。

布局中的每个元素都是一个视图。展示在屏幕上的任何东西都被称作视图。每一个文本字段、列表项、Web视图、地图、多彩的转轮或者按钮等,都可以用视图来表示。Android框架为你提供了许多视图,例如ListView(列表框)和TextView(文本框),但是想要创建更多包含动画以及特定行为的复杂的视图,开发者们需要自己开发。

提示: 即便你打算在代码中设置TextView的文本,声明一个默认字符串仍然不失为一个好的方法。这样,你就能看到有全部文本时布局是什么样子。

1.3.3 ACTIVITY类
让我们来看看src/com/example/ExampleActivity.java文件中的Hello World应用的源代码。在manifest中,你声明了这个活动并把它设置为应用运行时的主要活动。Activity类是Android应用程序的主要构造模块,它代表该应用的一屏。你的应用程序的每一屏都包括它代表的一个活动。在某些情况下,一个活动中包括的内容可能会被交换而不改变该活动(当使用fragments时,这个之后会了解)。对于高效Android开发来说,了解Activity类的生命周期至关重要,因为它对于用户体验有最为直接的效果。

`package com.example;`
`import android.app.Activity;`
`import android.os.Bundle;`
`public class ExampleActivity extends Activity {`
` ``   `` /`*` Called when the activity is first created. ``/`
` ``   `` @Override`
` ``   `` public void onCreate(Bundle savedInstanceState) {`
` ``   ``  ``   `` super.onCreate(savedInstanceState);`
` ``   ``  ``   `` setContentView(R.layout.main);`
` ``   `` }`
`}`

Android活动在创建UI 事件时使用回调结构。该框架在活动的创建或销毁过程中调用适当的重载方法。在示例的活动中,只实现了一个方法:onCreate。在一个活动被第一次创建时会调用这个方法。通常,这时会对活动进行设置。这里你可以创建视图并建立你所需要加载数据的适配器。除了onCreate之外,重载任何活动的方法都不是绝对必要的。

刚才的例子中为活动设置了视图。它是通过调用setContentView(R.layout.main)做到这一点的。这引用了Android开发者工具中为你构建的R.java文件。在这种情况下,它告诉系统从多个布局目录中选择一个并加载main.xml文件。Android 执行环境选择最合适的main.xml文件(在这种情况下,只有一个),并且加载它。

提示: 所有的Android回调在主线程、UI线程上发生。记住不要阻止该进程,这很重要。在不同的线程上执行长时间的操作需要小心,否则UI可能会不响应操作。

R.java文件允许你去引用存放在文件夹中的资源生成的ID。要引用布局文件,使用R.layout.file_name``;要引用字符串,使用R.string.string_name;诸如此类。

活动是生命周期较短的对象。它们频繁地被创建和销毁。每当用户旋转自己的手机,当前展示的活动就会被销毁并且重新创建。此外,Android系统可能会因为设备缺乏内存或资源而销毁一个活动。设计你的活动时,需要明白它们随时可能会被关掉,这一点很重要。

要注意保存任何用户可能会看重的状态。如果活动被销毁,你肯定不想让用户重新输入文本而使他们失望。在下一章中你将会了解更多关于如何保存活动状态的知识。

1.3.4 硬件按钮
3.0版本之前的Android设备有四个硬件按钮:Home键、Back键、Menu键和Search键。Android版本3.0及以上的硬件按钮是可选的。在那些设备上,Android呈现在屏幕上的软件按钮拥有硬件按键的功能(图1.10)。

点击Home键则进入到手机的主屏幕。一般来说应用程序都用不到这个按键,除非该应用程序是主屏幕的替代品。

点击Back按键意味着Android活动的出栈。这允许用户可以很容易地进入一个应用并且随后迅速地返回之前的界面。

提示: 为了确保应用程序是一个很好的Android公民,如果他们突然进入应用的话,总是要允许用户返回到先前的应用程序(例如,通过点击一个通知或者处理另一个应用程序创建的意图时)。不要强迫用户在返回他们先前任务之前备份应用上的许多界面。

Menu按键显示上下文相关的选项列表(图1.11)。使用选项菜单来展示应用中并不常用的选项。对于运行3.0或者更高版本的Android平板电脑和手机来说,这个按键不可用,选项放在活动栏展示。在后面的章节中你将会了解Android 4.0设备与之前Android版本的区别。

提示: 通常来说,用户难以发现藏在Menu按键里的功能。仔细考虑应用程序的需求,在布局中为所有用户常用的操作提供空间。

最后,Search按键的存在提供了在Android上运行一个搜索的快速接口。并非所有的应用程序都使用此按键,在许多应用中,点击这个按键不起任何作用。

另外,在一些硬件按键上执行其他的功能也是可能的。这些动作通常是通过长按某按钮触发。例如,长按Menu键就会激活软件键盘。应用程序可以利用这个功能在列表中提供过滤功能。

注意: 并不是所有的Android设备都有所有的这些按键。特别是,Android 4.0设备省略了“搜索”按键,这使得用户在应用之内进行搜索变得不可能。慎重仔细地评估在应用内搜索的必要性,如果搜索是一个必不可少的功能,那么在UI中提供一个按钮。

时间: 2024-12-28 18:16:46

《Android UI基础教程》——1.3节 Android UI基础的相关文章

Android Studio使用教程(四):Gradle基础_Android

其实很早之前也写了一篇Gradle的基础博客,但是时间很久了,现在Gradle已经更新了很多,所以暂且结合Stduio 1.0正式版与最新的Gradle语法来详细讲解下,小伙伴们直接跟我一步步来学习吧. 什么是Gradle? Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言. 安装Gradle 在Android Studio系列教程一–下载与安装中新建项目成功后会下载Grad

Android Studio使用教程(四):Gradle基础

其实很早之前也写了一篇Gradle的基础博客,但是时间很久了,现在Gradle已经更新了很多,所以暂且结合Stduio 1.0正式版与最新的Gradle语法来详细讲解下,小伙伴们直接跟我一步步来学习吧. 什么是Gradle? Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言. 安装Gradle 在Android Studio系列教程一–下载与安装中新建项目成功后会下载Grad

《Android框架揭秘》——1.1节Android源代码组成

1.1 Android源代码组成Android框架揭秘那么,我们该如何学习Android框架呢?其实,学习Android框架时,最准确.最权威的参考资料就是Android的源代码,这些源代码从http://android.git.kernel.org/可免费下载.关于这方面的内容,请参考第2章中的相关部分. Android主要源代码组成如下. Kernel:Android Linux内核2.6bionic:Android标准C运行支持库bootloader:Android内核加载器参考build

JavaScript基础教程——入门必看篇_基础知识

JavaScript他是一种描述性语言,其实他并不难学,只要用心学,一定会学好,我相信大家在看这篇文章的时候,一定也学过HTML吧,使用JavaScript就是为了能和网页有更好的交互,下面切入主题.     一. JavaScript 1.什么是JavaScript JavaScript是一种描述性语言,也是一种基于对象(Object)和事件驱动(Event Driven)的,并具有安全性的脚本语言. 2.JavaScript的特点 JavaScript主要用来向HTML页面添加交互行为. J

ADO.NET 基础教程(二)

ado|基础教程   上一节讲到了怎样使用ADO.NET来查询数据,这节讲怎么样运行SQL的SELECT.INSERT和UPDATE命令及存储过程 1.存储过程 C#的代码如下: /// <summary>  /// 存储过程参数结构  /// </summary>  public struct ProcParam  {   public string ParamName;   public string ParamValue;   public System.Data.SqlDb

PHP新手上路基础教程目录

基础教程 PHP新手上路基础入门教程目录清单,本教程由网页教学网收集整理希望对初学PHP的朋友有所帮助,当您转载时别忘了加上本站的连接,谢谢! PHP新手上路基础简介 为什么要选择PHP 从一个简单的程序来了解PHP PHP入门之数据类型 建设一个简单交互的网站(一) 用include和require进行模块化,从HTML到PHP 建设一个简单交互的网站(二) 计数器 反馈表单 站内搜索引擎 建设一个简单交互的网站(三) 密码验证 建设一个简单交互的网站(四) 文件上传 建设一个简单交互的网站(

C 语言基础教程(我的C之旅开始了)[八]_C 语言

19. 基本数据类型:复数类型和虚数类型 C99 新增了复数类型(_Complex)和虚数类型(_Imaginary).简单来说,C99 提供了三种复数类型:float _Complex,double _Complex,和 long double _Complex.对于 float _Complex 类型的变量来说,它包含两个 float 类型的值,一个用于表示复数的实部(real part),另一个用于表示虚部(imaginary part).类似地,double _Complex 包含两个

《Android UI基础教程》——2.3节排布视图

2.3 排布视图 Android UI基础教程 Android视图层次起始于一个布局容器.这些容器包含子视图并安排它们的相对位置.有几个具有不同特征的容器类型,以在不同情况下获得最优解. 2.3.1 FrameLayout 最简单的布局容器是FrameLayout.这个容器完全不安排子视图.它只是简单地呈现每一个视图,从上到下摆下来.视图的顺序是基于它们在XML文件中的声明:视图在文件的后部声明的会被画在顶部.任何时候当你想创建重叠视图时都可以使用这个布局. 当创建自定义的可点击的元素时Fram

《Android UI基础教程》——2.6节 防止应用程序无响应(ANR)

2.6 防止应用程序无响应(ANR) Android UI基础教程 一个Android应用程序运行在它自身的进程之上,是与其他应用无关的沙盒应用.应用被单个线程操控:主线程,或者叫做UI线程.要让应用能够快速响应,Android限制了函数调用的时间.如果函数超过了它的时间限制,则会出现一个应用程序没有响应(ANR)的对话框,提示用户选择继续等待或者强制关闭应用.你应该不惜任何代价避免ANR的出现.当你在主线程上执行长时间的操作时ANR会出现,例子包括网络I/O.磁盘I/O.数据库查询以及密集的C