《Android应用程序开发》第4章 用户界面开发
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.1.2 事件处理
什么是事件呢?事件就是用户与UI(图形界面)交互时所 触发的操作。例如,在手机键盘上按下一个键,就可 以触发几个事件。键盘上的键被按下时就触发了“按 下”事件,当松开按键时又会触发“弹起”事件。在 Android中,这些事件都将被传送到事件处理器,它是 一个专门接受事件对象并对其进行翻译和处理的方法。 在Java程序中,实现与用户交互功能的控件都需要通过 事件来处理,需要指定控件所用的事件监听器。当然, Android同样需要设置事件监听器。另外,在Android 下,View同样可以响应按键和触屏两种事件,分别如 下所示。
任何一个View对象都将继承android.view.View类。它是
一个存储有屏幕上特定的一个矩形布局和内容属性的数 据结构。一个View对象可以处理测距、布局、绘图、 焦点变换、滚动条,以及屏幕区域自己表现的按键和 手势。作为一个基类,View类为Widget服务,Widget 则是一组用于绘制交互屏幕元素的完全实现子类。 Widget处理自己的测距和绘图,所以可以快速地用它 们去构建UI。可用到的Widget包括Text、EditText、 Button、RadioButton、Checkbox和ScrollView等。 2. ViewGroup ViewGroup是一个android.view.Viewgroup类的对象。顾名 思义,ViewGroup是一个特殊的View对象,它的功能 是装载和管理一组下层的View和其他ViewGroup,
界面有点像写HTML代码,要先给Android定框架, 然后再往框架里面放控件。本章将详细介绍这些 框架和能够放在框架中的常用控件。本章可以作 为这些框架和控件的查询手册,可供你在开发过 程中随时查阅。
本章各小节目录
4.1 用户界面开发详解 4.2 常用控件应用 4.3 界面布局 4.4 小结
4.1 用户பைடு நூலகம்面开发详解
下面我们通过一个示例程序(具体参见本书所附代码: 第4章\Examples_04_01)来处理各种事件,主要包括: Button控件事件监听、按键按下事件、按键弹起事件、 触笔点击事件。示例成功运行后,点击“OK”按钮后 如图4-2所示,按键“按下”时如图4-3所示,按键“
弹起”时如图4-4所示,触笔点击屏幕时如图4-5所示。 具体实现如代码清单4-1所示。
{ switch (keyCode) { case KeyEvent.KEYCODE_DPAD_CENTER: DisplayToast("按下:中键"); break; case KeyEvent.KEYCODE_DPAD_UP: DisplayToast("按下:上方向键"); break; case KeyEvent.KEYCODE_DPAD_DOWN: DisplayToast("按下:下方向键"); break; case KeyEvent.KEYCODE_DPAD_LEFT: DisplayToast("按下:左方向键"); break; case KeyEvent.KEYCODE_DPAD_RIGHT: DisplayToast("按下:右方向键"); break; case KeyEvent.KEYCODE_0: DisplayToast("按下:0"); break; } return super.onKeyDown(keyCode, event);
public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) { return super.onKeyMultiple(keyCode, repeatCount, event); } /* 触笔事件 */ public boolean onTouchEvent(MotionEvent event) { int iAction = event.getAction(); if (iAction == MotionEvent.ACTION_CANCEL || iAction == MotionEvent.ACTION_DOWN || iAction == MotionEvent.ACTION_MOVE) { return false; } //得到触笔点击的位置 int x = (int) event.getX(); int y = (int) event.getY(); DisplayToast("触笔点击坐标:("+Integer.toString(x)+","+Integer.toString(y)+")"); return super.onTouchEvent(event); } /* 显示Toast */ public void DisplayToast(String str) { Toast.makeText(this, str, Toast.LENGTH_SHORT).show(); } }
} }
/* 按键弹起所触发的事件 */ public boolean onKeyUp(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_CENTER: DisplayToast("弹起:中键"); break; case KeyEvent.KEYCODE_DPAD_UP: DisplayToast("弹起:上方向键"); break; case KeyEvent.KEYCODE_DPAD_DOWN: DisplayToast("弹起:下方向键"); break; case KeyEvent.KEYCODE_DPAD_LEFT: DisplayToast("弹起:左方向键"); break; case KeyEvent.KEYCODE_DPAD_RIGHT: DisplayToast("弹起:右方向键"); break; case KeyEvent.KEYCODE_0: DisplayToast("弹起:0"); break; } return super.onKeyUp(keyCode, event); }
ViewGroup可以为UI增加结构,并且将复杂的屏幕元素 构建成一个独立的实体。作为一个基类,ViewGroup 为Layout(布局)服务,Layout则是一组提供屏幕界面通 用类型的完全实现子类。Layout可以为一组View构建 一个结构。 图4-1是一个由View和ViewGroup布局的Activity界面。
boolean onKeyDown(int keyCode, KeyEvent event)用于 响应按键按下。 boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event)用于响应按键重复点击。官方API指出 onKeyMultiple方法总是返回false,即它没有handle, 因此必须重写才能实现。 boolean onKeyUp(int keyCode, KeyEvent event)用于响应 按键释放,onTouchEvent(MotionEvent event)用于响应 触摸屏事件。
来显示一个短时间的提示信息。
代码清单4-1 第4章 \Examples_04_01\src\com\yarin\android\Examples_04_01\Activity01.jav a
/** * * 控件事件通过设置其控件的监听器来监听并处理事件 * 按键按下事件:通过重写onKeyDown方法 * 按键弹起事件:通过重写onKeyUp方法 * 触笔点击事件:通过实现onTouchEvent方法 * 示例中使用了Toast控件: * Toast.makeText(this, string, Toast.LENGTH_SHORT).show(); * 显示提示信息 * */ public class Activity01 extends Activity
下面分析如何处理这些事件,在Android中,控件事件是 通过设置其控件的监听器来监听并重写某些函数来处 理的。具体实现请参见本书所附代码:第4章 \Examples_04_01。这里需要说明的是,我们使用了
Toast.makeText(this, string, Toast.LENGTH_SHORT).show();
第4章 用户界面开发
一个好的应用界面的必备条件是:内容清楚、指示 明白、屏幕美观和有亲切感。界面通常包含图形 和文字。应用界面的设计是对控件进行适当的取 舍及功能的选择和处理的过程。在程序设计中, 需要对设计的方法反复推敲、琢磨,才能使其达 到完美的境界。 Android平台提供的控件是非常完美的,控件的使用 与网页的设计类似,尽量用parent_width等抽象长 度,用Theme来定制风格,抽取所有的字串等信 息进行本地化设计。Android的界面需要写在 “res/layout”下面的布局文件中,一般情况下, 一个布局文件对应一个界面。设计Android的
4.1.1 用户界面简介
Android生成屏幕有三种方式:xml配置生成;通过用户 界面接口生成;直接用代码生成。在一个Android应用 中,用户界面是由View和ViewGroup对象构建的。 View与ViewGroup都有很多种类,而它们都是View类 的子类。开发者可以对View和ViewGroup进行组合, 来完成应用程序界面设计。下面我们分别来讨论View 和ViewGroup。 1. View
Android应用程序的基础功能单元就是Activity类中的 一个对象。Activity可以做很多事,比如界面显示、 事件处理等。Android应用程序界面通常使用View 和ViewGroup控件配XML样式来进行设计;而事件 则包括按钮事件、触屏事件以及一些高级控件的 事件监听。下面我们分别介绍Activity的界面设计、 显示和事件处理。
{ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //获得Button对象 Button button_ok = (Button) findViewById(R.id.ok); //设置Button控件监听器 button_ok.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { //这里处理事件 DisplayToast("点击了OK按钮"); } }); } /* 按键按下所触发的事件 */ public boolean onKeyDown(int keyCode, KeyEvent event)
从图4-1中可以看出,一个Activity界面可以包含多个 ViewGroup和View,通过这样的组合可以实现更复杂、 更完美、更满足开发者需要的界面。 当Activity调用它的setContentView()方法并且传递一个参 数给根节点对象时,一旦Android系统获得了根节点的 参数,它就可以直接通过节点来测距和绘制树。当 Activity被激活并获得焦点时,系统会通知Activity并且 请求根节点测距并绘制树,根节点就会请求它的子节 点去绘制它们自己。同时,每个树上的ViewGroup节 点负责绘制它的直接子节点。正如之前提到的,每个 ViewGroup都有测量它的有效空间、布局它的子对象 并且调用每个子对象的Draw()方法去绘制它们自己。 子对象可能会请求获取它们在父对象中的大小和位置, 但是父对象对每个子对象的大小和位置有最终的决定 权。