李刚的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

自定义Button,复写里面的onKeyDown,不起作用相关推荐

  1. cad面积累计lisp怎么用_CAD里面的lisp有什么作用啊,怎么用,要具体的,能让我明白加分?...

    回答: 1.计算所有线段总长度(加载后只需框选所有线段便可得出这些线段的总长度) (defun c:LL () (setvar "cmdecho" 1) (setq en (ssg ...

  2. JS事件函数里面的(ev)有什么作用

    ev就是Event 对象的缩写 Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 事件通常与函数结合使用,函数不会在事件发生前被执行! 例子: w ...

  3. GridView 里的删除不起作用

    里面的Delete不起作用,下面想用源码来解释这一现象,理解为什么删除不起作用: 当我点击次Delete时,在服务器端经历了以下步骤来处理: this.RaisePostBackEvent(this. ...

  4. Android 自定义Button按钮显示样式(正常、按下、获取焦点)

    2019独角兽企业重金招聘Python工程师标准>>> 现在的用户对APP的外观看得很重要,如果APP内所有元件都用Android默认样式写,估计下面评论里就有一堆在骂UI丑的.今天 ...

  5. android 自定义控件 焦点,Android 自定义Button按钮显示样式(正常、按下、获取焦点)...

    现在的用户对APP的外观看得很重要,如果APP内所有元件都用Android默认样式写,估计下面评论里就有一堆在骂UI丑的.今天学习自定义Button按钮样式.Button样式修改的是Button的背景 ...

  6. 使用xib自定义button

    最近一直在使用xib开发,在xib上面使用inset调整button的image或者title的位置实在是有点呵呵 索性自己用xib定义button,添加imageView和Label的属性,在最上层 ...

  7. html 里面的 role 属性是什么意思

    role="button" role是什么意思? html 里面的 role 属性是什么意义和用途 使用role属性告诉辅助设备(如屏幕阅读器)这个元素所扮演的角色,属于WAI-A ...

  8. IOS开发之自定义Button(集成三种回调模式)

    前面在做东西的时候都用到了storyboard,在今天的代码中就纯手写代码自己用封装个Button.这个Button继承于UIView类,在封装的时候用上啦OC中的三种回调模式:目标动作回调,委托回调 ...

  9. thinkphp url去掉index.php,thinkphp 去掉URL 里面的index.php(?s=)

    例如你的原路径是 http://localhost/test/index.php/home/goods/index.html 那么现在的地址是 http://localhost/test/home/g ...

最新文章

  1. android 电量控件,Android实现显示电量的控件代码
  2. 自考c语言程序设计,自考“C语言程序设计”模拟试题八
  3. 趣读:程序员泪流满面的20个瞬间!
  4. 前端学习(571):margin负值下的两栏自适应
  5. 29 SD配置-主数据-信用管理-分配订单类型的信贷控制
  6. 安装ceston8出现timeout_瓦罗兰特Valorant:显示逾时怎么办 瓦罗兰特time out解决
  7. html怎么隐藏y方向内容,如何隐藏scroll-Y纵向滚动条,并不影响内容滚动的方法...
  8. iOS Crash文件的解析(一)
  9. 云计算学习——Overlay网络技术概述
  10. virtualbox win7虚拟机启动exe提示“DX11 could not switch resolution”解决方案
  11. 使用android studio设置签名信息
  12. 常用手持设备的use-agent头信息
  13. Warning: To load an ES module, set “type“: “module“ in the package.json or use the .mjs extensi
  14. 常见的 vue elementUI el的标签总结
  15. 休闲游戏:跑跑卡丁车在线玩!
  16. 网易云音乐评论 可视化分析
  17. ssm基于微信小程序的恋上诗词设计与实现毕业设计源码011431
  18. flash3D引擎对比分析
  19. ML 学海拾贝 07/03/2018
  20. 助企开门红 浙江省科技厅厅长高鹰忠一行到访加速科技

热门文章

  1. leetcode198 打家劫舍
  2. Redis:06---数据库管理
  3. 算法(11)-leetcode-explore-learn-数据结构-链表的经典问题
  4. 算法题 如何找到数组中重复的数字
  5. java 进制转换 十进制转二,八,十六进制
  6. 中国经济转型知易行难
  7. Eclipse GCC 入门
  8. store_coding_state (cs_cm)的作用
  9. 解决跨域问题:No ‘Access-Control-Allow-Origin‘ header is present on the requested resource.
  10. 解决:A component required a bean of type ‘javax.jms.Queue‘ that could not be found.