- 浏览: 136796 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (172)
- java (172)
- c# winform 关于窗体最大化时的是否全屏效果与是否遮盖任务栏 (1)
- c# winform 只运行一个程序实例 (1)
- Shiro权限框架 (1)
- Java字节码(.class文件)的代码解析 (1)
- Hibernate、Spring和Struts工作原理及使用理由 (1)
- 基本PKG处理命令 (1)
- 最近写的代码的小结 (1)
- Dual Palindromes (1)
- 编译TortoiseSVN1.7源代码笔记 (1)
- Android项目代码混淆 (1)
- 关于就业叨咕几句 (1)
- Java重定向System.out和System.err (1)
- IHS与WAS集成插件静默安装 (1)
- 专题地图概述 (1)
- 关于MapXtreme2004附带Sample不能运行的问题 (1)
- SQL注入漏洞 (1)
- 回顾过去 展望未来(写给自己) (1)
- DB2认证考试经验谈(700&&701) (1)
- 今天用到了RM格式文件的分割工具RealProducer (1)
- 搜索引擎还是很有发展前途的 (1)
- 泰利德破解,实现学校机房免费上网 (1)
- Arduino 引言:移动互联外设传感展望 (1)
- c/c++ static 用法总结(三版本合一) (1)
- JQuery与xml的组合谈 (1)
- Android开发之消息处理机制(一)——Handler (1)
- Android开发之PopupWindow (1)
- 解析BitmapData.getPixel32()返回值因何不准确 (1)
- 关于Ext引用js的顺序问题 (1)
- Js事件大全 (1)
- 使用JavaFX2.0编写国际象棋游戏 (1)
- Hibernate/JPA常见异常分析与解决 (1)
最新评论
-
amcucn:
这排版看得
Shiro权限框架 -
WAMING5:
这也太紧凑了,眼看花了
Shiro权限框架 -
longzhun:
大虾 ,看得出你很懒啊!发个贴 这样子怎么看!!!
Shiro权限框架 -
swanky_yao:
活干的不细!!
Spring+Hibernate框架下Mysql读写分离、主从数据库配 -
饶首建:
不错,不过用处比较少吧
批处理设ip和dns
[size=large;]android开发中的ui控制(七)[/size]
[size=medium;]<br>[/size]
[size=medium;]转载自 http://www.android777.com/index.php/tutorial/android-view/androids-ui-control-g.html<br>[/size]
[size=medium;]<br>[/size]
[size=medium;]到这里大家应该都会使用一些简单控件、有趣的控件结合布局管理对象来创建一些简单的界面了。可是如果光只有界面而没有对应的ui交互的话那整个应用就像一幅画一样,只能看不能编辑修改。所以我们要学会处理一些ui事件,让整个应用能“活起来”,而不是看起来就像是几张图拼起来的。[/size]
[size=medium;]</span>
[size=medium;]在android中,我们用拦截事件来处理ui交互。当用户触摸屏幕、点击按钮、输入文字时都会触发对应的事件。我们通过拦截这些事件,在事件发生之前或之后插入一些代码来实现ui交互。[/size]
[size=medium;][/size]
[size=medium;]首先我们要知道android使用的是跟java gui一样的单线程事件模型,系统有将所有ui事件按照发生顺序推入一个eventqueue中,然后有一个ui线程专门将事件从eventqueue中移除,然后执行它,<a title="android中的ui控制(二)" href="http://www.android777.com/index.php/tutorial/androids-ui-control-b.html" target="_blank">具体看这里</a>。为了让每个view都能响应事件,view提供了几个常用的回调方法用来响应事件。比如一个button对象,当你在触摸屏上点击它时,系统就会产生一个触摸事件,然后调用button对象中的ontouchevent方法。为了要拦截这个事件,你可以扩展button对象重写里面的ontouchevent方法,在里面插入你需要完成的逻辑代码。但是一个界面一般都是由多个view对象组成的,如果每个view对象都需要被扩展然后重写对应的事件代码,那编码上就很难,也很难维护。所以view对象里也提供了一系列的内部接口,让你可以通过它们去捕捉对应的事件,这些内部的接口就叫:eventlistener。[/size]
[size=medium;][/size]
[size=medium;]对应不同的事件类型,android在view里内置了不同的eventlistener。你需要将这些不同类型的eventlistener注册到view对象,那么当view对象触发了对应的事件后就会调用注册这个事件的eventlistener。几个常用的eventlistener有:[/size]
[size=medium;][/size]
[size=medium;]点击事件:[/size]
[size=medium;][/size]
[size=medium;]view.onclicklistener :注册事件后(通过调用view.setonclicklistener),当用户点击或者触摸视图时会调用这个接口定义的方法。[/size]
[size=medium;][/size]
[size=medium;]view.onlongclicklistener:注册事件后(调用view.setonlongclicklistener),当用户长按住某个视图时调用这个接口。[/size]
[size=medium;][/size]
[size=medium;]view.onfocuschangelistener:注册事件后(通过view.setonfocuschangelistener),当当前视图焦点变化时会调用这个接口。[/size]
[size=medium;][/size]
[size=medium;]view.onkeylistener:注册事件后(通过view.setonkeylistener),当视图接受到键盘事件时会调用这个接口。[/size]
[size=medium;][/size]
[size=medium;]view.ontouchelistener:注册事件后(通过view.setontouchlistener),当用户在触摸屏上触摸、释放、移动手指时会调用这个接口。[/size]
[size=medium;]<br>[/size]
[size=medium;][/size]
[size=medium;]下面演示如何给一个按钮注册点击事件:[/size]
[size=medium;][/size]
[size=medium;]1.直接用匿名接口实现类对按钮添加事件,它的好处是代码简洁,缺点是当有很多个view对象时,代码会比较难维护:[/size]
package com.android777.demo.uicontroller; import android.app.activity;import android.os.bundle;import android.view.view;import android.widget.button;import android.widget.toast; public class listenerdemoactivity extends activity { @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.listener); button b1 = (button) findviewbyid(r.id.button1); b1.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { toast.maketext(listenerdemoactivity.this, "您点击了按钮", toast.length_long).show(); } }); } }
[size=medium;]2. 将ui事件的处理代码交由activity来处理,这时候你的activity需要多实现一个onclicklistener接口。它的好处是代码比较简洁,可以由activity来同时当做好几个view的事件处理对象:[/size]
package com.android777.demo.uicontroller; import android.app.activity;import android.os.bundle;import android.view.view;import android.view.view.onclicklistener;import android.widget.button;import android.widget.toast; public class listenerdemoactivity extends activity implements onclicklistener{ @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.listener); button b1 = (button) findviewbyid(r.id.button1); b1.setonclicklistener(this); } @override public void onclick(view v) { toast.maketext(listenerdemoactivity.this, "您点击了按钮", toast.length_long).show(); } }
[size=medium;] 3. 在布局文件的xml中定义引用到这个xml文件的activity中哪个方法要处理对应的按钮事件(这个很简洁明了,不过有点违背了mvc的理念,它在 sdk1.6+ 才有支持):[/size]
[size=medium;]listener.xml:[/size]
<?xml version="1.0" encoding="utf-8"?><linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="一个按钮" android:id="@+id/button1" android:onclick="onbutton1click" /> </linearlayout>
[size=medium;] java代码:[/size]
package com.android777.demo.uicontroller; import android.app.activity;import android.os.bundle;import android.view.view;import android.widget.toast; public class listenerdemoactivity extends activity{ @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.listener); } //xml中定义的按钮事件代码, 方法签名必须是 public void xxxx(view); public void onbutton1click(view v) { toast.maketext(listenerdemoactivity.this, "您点击了按钮", toast.length_long).show(); } }
[size=medium;] 三种写法的运行效果都是一样的:[/size]
[size=medium;]<br>[/size]
[size=medium;]<br><img src="http://dl.iteye.com/upload/attachment/532779/d1f89d8e-4d77-3c41-9bfb-65fec5753d13.png" alt="">[/size]
[size=medium;]<br>[/size]
[size=medium;]<br> [/size]
[size=medium;]上面的事件处理代码onclick没有返回值。但是有很多其他的事件处理代码需要返回一个boolean值,为什么需要一个返回值呢?这跟这些事件的性质有关,看下面:[/size]
[size=medium;]onlongclick:它需要一个返回值来指示android事件处理系统,是否在这个方法里已经销毁了这个事件(都完成了,不需要交给其他处理)或者不处理这个事件,由其他的注册view来处理。如果返回true值,表示这个事件已经处理完了,可以直接销毁,返回false表示这个事件还没处理完成,由android事件处理系统将这个事件交给其他注册的eventlistener进行再处理。[/size]
[size=medium;]onkey:跟onlongclick差不多,返回true表示处理完成,返回false则交由其他注册的eventlistener处理。[/size]
[size=medium;]ontouch:这个比较不一样,因为ontouch后还有很多其他的动作。如果返回true,就表示事件已经处理完成,则后面发生的移动手指,释放手指动作就都被忽略掉。[/size]
[size=medium;]有一点需要注意的是keyevent键盘事件会被传递到当前有焦点的view对象中,它的传递过程是一个从顶至下的过程,假设你一个view对象嵌套在2层的view对象里,如果上层的view对键盘事件返回true值,则事件就不会传递到当前焦点的view对象中。[/size]
[size=medium;]触摸模式:[/size]
[size=medium;]一般的不是触摸屏的手机,你需要使用方向键将当前焦点在多个视图内转换,焦点只会跳到一些具备焦点的view对象。如果手机是触摸屏的,你就需要使用手指触摸来点击一些view,这时候很多对象将没有焦点可以看到,如输入框还能看到焦点、按钮就看不到焦点状态。当你用手指触摸屏幕产生触摸事件时,系统就会进入触摸模式。在触摸模式中,只有view.isfocusableintouchmode()方法返回true的值,才具备焦点。所以你在edittext里调用这个方法会返回true,而在button中则返回false,当你触摸按钮时则会触发onclick事件。[/size]
[size=medium;][/size]
[size=medium;]当用户使用方向键时则退出触摸模式,系统将按照一般设备来执行。是否触摸模式是由系统来维护的,你可以通过调用window或activity中的isintouchmode方法来判断现在系统所处的模式。[/size]
<span style="font-size: medium;"><br>[/size]
发表评论
-
Hibernate/JPA常见异常分析与解决
2012-02-07 17:24 14701. ClassNotFoundException: ... -
使用JavaFX2.0编写国际象棋游戏
2012-02-07 16:24 1062前面发布了不少Javafx2的教程,不觉手痒,想尝试一 ... -
Js事件大全
2012-02-04 15:34 747一般事件 事件 ... -
关于Ext引用js的顺序问题
2012-02-02 15:49 722今天自己搞了个ext的helloworld,所需的包都 ... -
解析BitmapData.getPixel32()返回值因何不准确
2012-02-02 12:29 957<div style="widt ... -
Android开发之PopupWindow
2012-01-31 13:48 1648<h1>Android开发之PopupWi ... -
Android开发之消息处理机制(一)——Handler
2012-01-11 15:19 1132<h1>Android开发之消息处理机制( ... -
JQuery与xml的组合谈
2011-12-21 17:18 770JQuery与xml的组合谈 今天谈的是XML,学ja ... -
c/c++ static 用法总结(三版本合一)
2011-12-21 10:34 786<span style="&qu ... -
Arduino 引言:移动互联外设传感展望
2011-12-20 14:08 1296作者:mznewfacer (Wolf Geek) ... -
泰利德破解,实现学校机房免费上网
2011-12-20 13:58 923泰利德破解,实现学校机房免费上网<br> ... -
搜索引擎还是很有发展前途的
2011-12-19 11:49 926相信大家已经听说,在头几天,搜狐推出了一个专业搜索门户 ... -
今天用到了RM格式文件的分割工具RealProducer
2011-12-19 09:19 673项目要加一些视频文件,这些视频都是几个老师对数据结构课 ... -
DB2认证考试经验谈(700&&701)
2011-12-16 17:17 1082很多人都通过了D ... -
回顾过去 展望未来(写给自己)
2011-12-15 16:19 1450本来想用“昨天今天明天”做标题来着,但是人家本山大叔说 ... -
SQL注入漏洞
2011-12-15 12:19 693CSDN上的ASP.NET电子杂志下载下来看,就看到了 ... -
关于MapXtreme2004附带Sample不能运行的问题
2011-12-15 10:54 648</span> -
专题地图概述
2011-12-14 12:49 807<p class="MsoNorma ... -
IHS与WAS集成插件静默安装
2011-12-14 12:04 942<span style="col ... -
Java重定向System.out和System.err
2011-12-13 14:49 1143<div>继承PrintStream类: ...
相关推荐
Android开发自定义View之仿米家APP双色灯控制UI:做一个智能家居产品的简单智能灯UI https://blog.csdn.net/xh870189248/article/details/80486158
android-query android开发框架。 开发过java-web的人都懂得,有框架,开发起来是多么的方便。 注明:暂无API。所有的方法可在AQuery里找到。 大家可以尝试着使用。方便管理和控制UI界面。很不错的框架。
《Android开发案例驱动教程》 配套代码。 注: 由于第12,13,14章代码太大,无法上传到一个包中。 这三节代码会放到其他压缩包中。 作者:关东升,赵志荣 Java或C++程序员转变成为Android程序员 采用案例驱动模式...
该毕业设计不仅展示了学生在Android开发方面的实力,也为奇艺视频应用的发展提供了有力的技术支持。 计算机毕业设计 - Android奇艺高清UI界面源代码,保证可靠运行,计算机毕业生可参考,免费资源下载 计算机毕业...
这种方法打破了传统的Android UI设计模式,提供了一种更加灵活且高效的开发方式。通过将JavaScript与原生Android代码相结合,开发者可以实现更复杂的用户界面逻辑,同时保持对原生功能的完全控制。 该方法的核心...
这是Android开发与应用,原书配套的课件,作者张荣,目录如下。 第1章 Android简介 1.1 手机操作系统 1.2 Android起源 1.3 Android特征 1.4 Android体系结构 1.4.1 应用层 1.4.2 应用框架层 1.4.3 ...
Android Android Android Android 开发背景 � 计算技术、无线接入技术的发展,使嵌入式系统逐渐有能力对桌面系统常规业务进行支持。 � 谷歌长期以来奉行的移动发展战略:通过与全球各地的手机制造商和移动运营商...
Stage2_Lesson3Android应用开发基础及原理概要 Stage2_Lesson4Activity与Intent Stage2_Lesson5Service初步 Stage2_Lesson10应用程序签名及发布 Stage2_Lesson8ContentProvider Stage2_Lesson9BroadcastReceiver ...
第1章 Android开发简介 1.1 Android基本概念 1.1.1 Android简介 1.1.2 Android的系统构架 1.1.3 Android应用程序框架 1.2 OMS介绍 1.2.1 OPhone介绍 1.2.2 Widget介绍 1.3 小结 第2章 Android...
第14章“Android应用程序的主要方面”,介绍Android应用程序层开发的各个方面,基本上是横向内容,包括应用程序的基本控制、各种UI元素的使用、图形API使用3个方面的内容。 第15章“Android应用程序的设计思想”...
系统输入法弹出方式.当输入内容时输入框被系统键盘遮挡了,影响了用户操作体验,这就是开发中非常常见的软键盘遮挡的问题,该如何解决?下码来看吧
Stage2_Lesson3Android应用开发基础及原理概要 Stage2_Lesson4Activity与Intent Stage2_Lesson5Service初步 Stage2_Lesson10应用程序签名及发布 Stage2_Lesson8ContentProvider Stage2_Lesson9BroadcastReceiver ...
第1章 Android开发简介 1.1 Android基本概念 1.1.1 Android简介 1.1.2 Android的系统构架 1.1.3 Android应用程序框架 1.2 OMS介绍 1.2.1 OPhone介绍 1.2.2 Widget介绍 1.3 小结 第2章 Android...
第1章 Android开发简介 1.1 Android基本概念 1.1.1 Android简介 1.1.2 Android的系统构架 1.1.3 Android应用程序框架 1.2 OMS介绍 1.2.1 OPhone介绍 1.2.2 Widget介绍 1.3 小结 第2章 Android开发环境搭建 2.1 ...
Stage2_Lesson3Android应用开发基础及原理概要 Stage2_Lesson4Activity与Intent Stage2_Lesson5Service初步 Stage2_Lesson10应用程序签名及发布 Stage2_Lesson8ContentProvider Stage2_Lesson9BroadcastReceiver ...
本书以Android应用程序的开发为主题,并结合真实的案例向读者详细介绍了Android的基本组件的使用及应用程序开发的整个流程。本书的讲述由浅入深,实例全面并典型,几乎囊括了所有和Android应用相关的项目。全书分为...
Android开发之浅仿QQ聊天UI和键盘控制.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Android 实现了可以滑动左侧边缘退出Activity的功能