- 浏览: 142960 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (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 15201. ClassNotFoundException: ... -
使用JavaFX2.0编写国际象棋游戏
2012-02-07 16:24 1093前面发布了不少Javafx2的教程,不觉手痒,想尝试一 ... -
Js事件大全
2012-02-04 15:34 788一般事件 事件 ... -
关于Ext引用js的顺序问题
2012-02-02 15:49 768今天自己搞了个ext的helloworld,所需的包都 ... -
解析BitmapData.getPixel32()返回值因何不准确
2012-02-02 12:29 1004<div style="widt ... -
Android开发之PopupWindow
2012-01-31 13:48 1686<h1>Android开发之PopupWi ... -
Android开发之消息处理机制(一)——Handler
2012-01-11 15:19 1171<h1>Android开发之消息处理机制( ... -
JQuery与xml的组合谈
2011-12-21 17:18 805JQuery与xml的组合谈 今天谈的是XML,学ja ... -
c/c++ static 用法总结(三版本合一)
2011-12-21 10:34 821<span style="&qu ... -
Arduino 引言:移动互联外设传感展望
2011-12-20 14:08 1328作者:mznewfacer (Wolf Geek) ... -
泰利德破解,实现学校机房免费上网
2011-12-20 13:58 950泰利德破解,实现学校机房免费上网<br> ... -
搜索引擎还是很有发展前途的
2011-12-19 11:49 971相信大家已经听说,在头几天,搜狐推出了一个专业搜索门户 ... -
今天用到了RM格式文件的分割工具RealProducer
2011-12-19 09:19 714项目要加一些视频文件,这些视频都是几个老师对数据结构课 ... -
DB2认证考试经验谈(700&&701)
2011-12-16 17:17 1119很多人都通过了D ... -
回顾过去 展望未来(写给自己)
2011-12-15 16:19 1502本来想用“昨天今天明天”做标题来着,但是人家本山大叔说 ... -
SQL注入漏洞
2011-12-15 12:19 722CSDN上的ASP.NET电子杂志下载下来看,就看到了 ... -
关于MapXtreme2004附带Sample不能运行的问题
2011-12-15 10:54 690</span> -
专题地图概述
2011-12-14 12:49 856<p class="MsoNorma ... -
IHS与WAS集成插件静默安装
2011-12-14 12:04 968<span style="col ... -
Java重定向System.out和System.err
2011-12-13 14:49 1179<div>继承PrintStream类: ...
相关推荐
6. **DialogFragment**:对话框在Android应用中广泛应用,DialogFragment是Android官方推荐的方式,它继承自Fragment,可以方便地管理和控制对话框的显示与消失。 7. **动画(Animation)**:Android支持属性动画...
本文将深入探讨Android 8.1版本的SystemUI源码,介绍其结构、工作原理以及如何利用提供的gradle配置进行开发。 首先,让我们来看看`SystemUI`的构成。SystemUI组件主要由以下几个部分组成: 1. **StatusBar**:...
在Android系统架构中,SystemUI位于应用层与系统服务层之间,它提供了通知中心、状态栏、快速设置面板、锁屏界面以及各种系统级别的交互控件。深入理解SystemUI的源代码对于开发者优化系统UI性能、自定义系统行为或...
标题和描述提及了“新版Android开发教程+笔记七--基础UI编程1”,以及“安卓开发必备”,因此本篇内容将主要围绕Android基础UI编程展开。 Android UI编程是构建Android应用界面的核心部分。它涉及到使用各种布局和...
尽管AbsoluteLayout在Android SDK 2.3.3之后不再推荐使用,但在早期版本中,它可以允许开发者精确控制每个子视图的位置,通过设置`android:layout_x`和`android:layout_y`属性。然而,由于其不适用于不同屏幕尺寸和...
Android开发自定义View之仿米家APP双色灯控制UI:做一个智能家居产品的简单智能灯UI https://blog.csdn.net/xh870189248/article/details/80486158
在本资源中,"老罗Android开发视频教程 (android常用UI编程) 26-33集源码.zip"是一个包含Android应用开发教学内容的压缩文件。老罗,可能指的是知名的技术讲师罗永浩,以其通俗易懂的讲解风格而闻名。这个教程聚焦于...
在Android开发领域,UI设计是至关重要的一环,它直接影响到应用程序的用户体验和视觉吸引力。"Android新手UI集合全"这个资源包,显然为初学者提供了一整套的UI设计元素,帮助他们快速理解和实践Android应用界面的...
在Android开发过程中,UI设计是至关重要的一个环节,而颜色管理是UI设计中的核心部分。开发者经常需要知道屏幕上的各种UI元素所使用的具体颜色值,以便在代码中精确地重现这些颜色。本教程将详细介绍如何获取UI的...
总之,Android Things提供了将Android的丰富UI开发经验应用于物联网设备的机会。通过理解如何在有限的硬件资源上构建和管理UI,开发者可以创造出功能强大且直观的物联网解决方案。sample-simpleui项目就是一个很好的...
Android UI 设计器是Android开发中的一个重要工具,它允许开发者直观地设计应用程序的用户界面,无需手动编写XML布局代码。这个工具极大地提升了开发效率,使得非程序员也能参与到UI设计中来,实现快速预览和调整...
在Android开发中,锤子手机以其独特的UI设计风格赢得了众多用户的喜爱。为了实现类似锤子UI的布局,开发者需要深入理解Android布局系统,并掌握一些特殊的设计技巧。本篇将主要探讨如何在Android中仿制锤子UI的格子...
在Android应用开发中,UI框架的设计是至关重要的,它直接影响到应用的用户体验和代码的可维护性。"android项目整体UI框架"这个主题主要涵盖了三个方面:自定义Android项目的底部任务栏、实用Fragment的切换以及项目...
"android 音乐开发 UI素材"这个主题涉及到的是应用程序用户界面中的图形元素,尤其是针对音乐播放功能的按钮和布局设计。酷狗音乐和网易云音乐是两款在中国非常流行的音乐应用,它们的UI设计被广大用户所接受和喜爱...
在Android开发中,UI设计和实现是至关重要的部分。为了提高代码的可维护性和复用性,开发者常常会构建一个统一的UI框架。这个框架旨在规范应用中的界面设计,简化多维度UI管理,减少代码冗余,提升开发效率。本文将...
在Android开发中,模仿流行的移动应用UI布局是提升用户体验和设计水平的重要步骤。易信,作为一款在中国广受欢迎的即时通讯应用,其简洁而高效的设计风格深受用户喜爱。本源码项目专注于重现易信的UI布局,帮助...
在Android应用开发中,线程管理和UI更新是至关重要的部分,因为Android系统为每个应用程序分配一个主线程,也称为UI线程。主线程主要负责处理用户界面的交互,包括绘制和更新视图。然而,执行耗时的操作(如网络请求...
在Android开发中,UI设计是至关重要的一环,它关乎到应用程序的用户体验和视觉吸引力。本压缩包中的"android UI 各种小例子"为初学者提供了丰富的实践资源,旨在帮助开发者掌握基本的Android用户界面设计技巧。每个...
在Android开发领域,初学者经常会面临许多挑战,如理解Android应用程序的基本架构、学习XML布局、掌握Java或Kotlin编程语言,以及如何与...在学习过程中,建议结合官方文档和其他教程,以全面、深入地学习Android开发。