自定义Button,复写里面的onKeyDown,不起作用

李刚的Android疯狂讲义真是“疯狂”,浪费了3天时间,到底是他的代码有问题,还是怎么的不得而知。

问题描述:他的书里面第3.3基于回调事件处理Propagation的例程。是为了演示基于回调事件传播的例程序,源代码如下:
MyButton.java
  1. publicclassMyButtonextendsButton
    {publicMyButton(Context context ,AttributeSet set){super(context , set);}@Overridepublicboolean onKeyDown(int keyCode,KeyEvent event){super.onKeyDown(keyCode , event);Log.v("-MyButton-","the onKeyDown in MyButton");//返回false,表明并未完全处理该事件,该事件依然向外扩散return  false;}
    }
Propagation.java
  1. publicclassPropagationextendsActivity
    {
    @Override
    publicvoid onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    MyButton bn =(MyButton)findViewById(R.id.bn);
    //bn.setFocusable(true);
    bn.requestFocus();
    bn.setFocusableInTouchMode(true);
    //为bn绑定事件监听器
    bn.setOnKeyListener(newOnKeyListener()
    {@Overridepublicboolean onKey(View source,int keyCode,KeyEvent event){//只处理按下键的事件if(event.getAction()==KeyEvent.ACTION_DOWN){Log.v("-Listener-","the onKeyDown in Listener");}// 返回false,表明该事件会向外传播return false;}
    });
    }
  2. //重写onKeyDown方法,该方法可监听它所包含的所有组件的按键被按下事件
  3. @Override
    publicboolean onKeyDown(int keyCode,KeyEvent event)
    {super.onKeyDown(keyCode , event);Log.v("-Activity-","the onKeyDown in Activity");//返回false,表明并未完全处理该事件,该事件依然向外扩散return false;
    }
    MyButton继承了Button,并重写了onKeyDown方法,这个方法是在控件有焦点的情况下,当组件上按下某个按键触发该方法,这点很重要,
类似的还有OnkeyUp和OnKeyPress。这里涉及到一个焦点问题。
    那么什么是焦点问题:焦点可以理解为我们正在操作的对象,焦点在这里,就可操作。实际上这个MyButton是在Activity中的,我们程序默
认运行的时候焦点在Activity上,这就造成里面的MyButton无法操作,我是这么理解的,呵呵。所以程序要加两行的是:

    这里是不用setFocusable而用requstFocuns的原因是前者是设置是否允许此控件有获得焦点的能力,后者是请求获得焦点,一个是设置属性
,另一个是执行动作,故我们用后者,setFocunsableInTouchMode是获得焦点的方式,我们是触摸的时候获得焦点。设置好了之后,焦点定位
在了该Button上,当单击模拟器任意按键的时候,有程序是LogCat正确输出。
    本程序是为了演示:如果有任何一个事件处理方法返回了true,该事件还会继承向外传播。我不理解的书中”先把焦点移动到程序界面的按钮上“是几个意思,困惑了好长时间。
 

 

转载于:https://www.cnblogs.com/fruitbolgs/p/4160862.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460648.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

与socket网络编程有关的函数

以下内容源于网络资源的学习与整理,如有侵权请告知删除。 基于TCP通信的服务模式 服务端 socket函数,获取网络连接的文件描述符 bind函数,将服务器的端口、ip地址与socket函数创建的文件描述符绑定 listen函数,监听服务器的当前端…

转载Linq中GroupBy方法的使用总结

Group在SQL经常使用,通常是对一个字段或者多个字段分组,求其总和,均值等。 Linq中的Groupby方法也有这种功能。具体实现看代码: 假设有如下的一个数据集: public class StudentScore { public int ID { se…

在Atom中运行脚本

2019独角兽企业重金招聘Python工程师标准>>> 现在可以在atom官网(https://atom.io/)找到deb包。 插件script可以让atom运行脚本,具体请见:https://atom.io/packages/script。 下面大致讲一下如何使用。 安装atom后&…

js中的this

在面向对象编程语言中,对于this关键字我们是非常熟悉的。比如C、C#和Java等都提供了这个关键字,虽然在开始学习的时候觉得比较难,但只要理解了,用起来是非常方便和意义确定的。JavaScript也提供了这个this关键字,不过用…

在 Windows Azure 上部署并定制化 FreeBSD 虚拟机镜像

发布于 2014-12-11作者 陈阳FreeBSD 基础镜像现已登陆中国的 VM Depot! 对于青睐 BSD 而非 Linux 的开源爱好者来说,这无疑是个好消息。同时,随着该基础镜像的可用,我们期待很快看到更多来自社区的基于 F…

如何理解套接字的形容词前缀:“面向连接”与“无连接”

以下内容源于C语言中文网资料的学习与整理,非本人原创,如有侵权请告知删除。 前言 在《网络套接字socket的简介》一文中提到,流格式套接字(Stream Sockets)就是“面向连接的套接字”,它基于 TCP 协议&…

文件IO——Linux系统如何管理文件

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 硬盘中的静态文件 文件平时以一种固定的形式存放在硬盘中,我们叫它静态文件。 一块硬盘中可以分为两大区域:一个是硬盘内容管理表,另一个是真正存储内容的区域。 …

java String类 常用函数

为什么80%的码农都做不了架构师?>>> 1. 获取 int indexOf(int c) int indexOf(int c, int start) char charAt(int index) 2.判断 判断是否包含一个字符串 boolean contains(CharSequence cs) indexOf() //也可以用来判断是否包含 判断是否有内容 boole…

设备驱动程序的简介

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 一、驱动的概念 设备驱动程序(Device Driver),简称驱动程序、驱动(Driver),指操作系统中用来操控硬件的代码。 驱动是硬件与操…

Android开发实践:掌握Camera的预览方向和拍照方向

Android的Camera相关应用开发中,有一个必须搞清楚的知识点,就是Camera的预览方向和拍照方向,本文就重点讨论一下这个问题。图像的Sensor方向:手机Camera的图像数据都是来自于摄像头硬件的图像传感器(Image Sensor&…

SecureCRT显示乱码的解决办法

发现问题 在Ubuntu中编写代码,输出语句里带有中文,比如"printf("读出来的内容是:%s.\n", buf);"。使用交叉编译工具链编译后,将可执行程序转移至开发板系统运行,并使用SCRT来观测测试结果。此时发…

WCF数据契约

当使用DataMember时,和访问符无关,及时使用了private,成员都是可见的。相反如果使用static,为不可见。 上述的两个数据成员是等效的,如果是等效的话 数据成员的顺序也必须是相同的。 4.数据契约已知类型——使用KownTy…

spring mvc 配置解析之xml

2019独角兽企业重金招聘Python工程师标准>>> ##mvc.xml中可配置的元素## 既然是xml,当然是要遵循schema的规定. 那么schema文件在哪呢? 定位方法就是解开这个jar文件,找到META-INF/spring.schema文件,这是个文本文件,里面包含了namespace以及其对应的xsd文件的位置…

JDBC学习笔记——事务、存储过程以及批量处理

2019独角兽企业重金招聘Python工程师标准>>> 1、事务 1.1、事务的基本概念和使用示例 数据库事务,是指作为单个逻辑工作单元执行的一系列操作,要么完整…

验证码识别笔记(二)

这是验证码识别的第二篇,先看一下样图吧,就是下面那张。 看到这张图片,直观上就知道比第一篇中的要简单,这个“简单”用语言来描述,可以得到下面的几条结论: 1. 图片中的字符边界比较清晰,并且单…

centos6.5下搭建oracle 11g

为什么80%的码农都做不了架构师?>>> 安装依赖 yum install binutils compat-libstdc-33 compat-libstdc-33.i686 \ elfutils-libelf elfutils-libelf-devel gcc gcc-c glibc glibc.i686 \ glibc-common glibc-devel glibc-devel.i686 glibc-headers ksh…

JS 学习笔记--11---内置对象(Global/Math)

练习中使用的浏览器是IE10,如果各位朋友有不同意见或者遇到浏览器不兼容问题,希望指正 1、内置对象的定义:有ECMAScript实现提供的、不依赖与宿主环境的对象,在ECMAScript运行之前就已经创建好的对象就叫做内置对象。就是说&…

SQL Server 视图设计器

SQL Server 中经常需要写一些查询,关联好多张表,显示无数个列。如果使用视图设计器,可以大大提高效率,同是减少差错。1. 启动视图设计器为数据库“新建视图”,将启用视图设计器。2. 添加表在起始界面,将出现…

misc类设备驱动1——板载蜂鸣器驱动测试

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 一、驱动部分 1、前言 九鼎移植的内核已经提供了蜂鸣器驱动源码(在SI中搜索关键字buzzer,发现出现有x210-buzzer.c文件;或者在make menuconfig界面搜索buzzer&am…

github和git@osc提交问题

为什么80%的码农都做不了架构师?>>> 今天想用gitosc push下测试下自己能否正常使用gitosc的git仓库的,公钥SSH 已经加好。 ssh -T gitgit.oschina.net 测试正常。 结果报错could not read Username for https://git.oschina.net: No such fi…