Android View中OnKeyListener的onKey返回值

Android View中OnKeyListener的onKey返回值1.前言在调试Android原生Setting开始中,遇到DialogPreference中用遥控器操作SeekBar到100%时,再按一次右键SeekBar焦点会跳至确定按钮中去。正常现象应该是停留至SeekBar尾部。2.问题分析根本原因就是焦点变化了,当SeekBar为100%时,再按一次右键让焦点停留再当前位置即可。进一步分析就是对按键进行处理,当满足条件时,使系统不再处理这个按键。3.原生代码片段在View.java中/***Interfacedefin

大家好,又见面了,我是你们的朋友全栈君。

1. 前言

在调试Android原生Setting开始中,遇到DialogPreference中用遥控器操作SeekBar100%时,再按一次右键SeekBar焦点会跳至确定按钮中去。正常现象应该是停留至SeekBar尾部。

2. 问题分析

根本原因就是焦点变化了,当SeekBar100%时,再按一次右键让焦点停留再当前位置即可。
进一步分析就是对按键进行处理,当满足条件时,使系统不再处理这个按键。

3. 原生代码片段

View.java中

    /** * Interface definition for a callback to be invoked when a hardware key event is * dispatched to this view. The callback will be invoked before the key event is * given to the view. This is only useful for hardware keyboards; a software input * method has no obligation to trigger this listener. */
    public interface OnKeyListener { 
   
        /** * Called when a hardware key is dispatched to a view. This allows listeners to * get a chance to respond before the target view. * <p>Key presses in software keyboards will generally NOT trigger this method, * although some may elect to do so in some situations. Do not assume a * software input method has to be key-based; even if it is, it may use key presses * in a different way than you expect, so there is no way to reliably catch soft * input key presses. * * @param v The view the key has been dispatched to. * @param keyCode The code for the physical key that was pressed * @param event The KeyEvent object containing full information about * the event. * @return True if the listener has consumed the event, false otherwise. */
        boolean onKey(View v, int keyCode, KeyEvent event);
    }

4. onKey返回值说明

由上面的代码可见,对按键监听时,onKey的返回值不同,代表对按键的不同处理方式。

false: 抛给系统处理 (将事件放行,焦点会移动)
true:  用户自己处理 (将事件拦截,焦点不会移动)

因此,当满足条件时,让onKey的返回值为true即可将键值拦截下来由用户自己处理,系统便不再响应这个按键,焦点便不会移动。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160607.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • solidworks2016安装教程及激活成功教程方法视频_solidworks2016激活不成功怎么办

    solidworks2016安装教程及激活成功教程方法视频_solidworks2016激活不成功怎么办最好是重启之后安装,什么应用都别打开,不然可能会有干扰,我第一次安装没成功~第二次成功的转载http://www.cadzxw.com/5075.htmlsolidwork2016中文激活成功教程版下载:点击下载首先下载本站提供的solidworks2016软件。安装与激活成功教程方法亲测有效。1、下载完成后解压文件,首先打开激活成功教程文件夹,双击文件夹中的“SolidWorksSerialNumber…

    2025年8月21日
    4
  • ESP-Drone开源 Wi-Fi 无人机固件首次编译与错误排查

    ESP-Drone开源 Wi-Fi 无人机固件首次编译与错误排查**ESP-Drone原名ESP-Plane***代码仓库:[esp-drone](https://github.com/espressif/esp-drone)*中文文档:[gettingstarted](https://docs.espressif.com/projects/espressif-esp-drone/zh_CN/latest/index.html)*展示视频:[安装与试飞](https://b23.tv/hnLq8Z)

    2022年8月15日
    8
  • 初试JqueryEasyUI(附Demo)[通俗易懂]

    初试JqueryEasyUI(附Demo)[通俗易懂]写在前面准备布局Layout菜单树Tree内容页Tabs右键菜单Menu表单Form对话框Dialog示例Demo下载关于easyui不多说,对于我们这样没有美术功底的程序员来说,简直是大大的福利,

    2022年7月1日
    20
  • java线程池的正确使用方式,completableFuture

    java线程池的正确使用方式,completableFuture下面是最常见的线程池的使用和声明方式:publicclassThreadTest{ExecutorServicefixedThreadPool=Executors.newFixedThreadPool(50);publicvoiddothing(){for(inti=0;i<50;i++){…

    2022年6月28日
    86
  • BP神经网络的Matlab实现——人工智能算法

    BP神经网络的Matlab实现——人工智能算法这几天在各大媒体上接触到了人工智能机器学习,觉得很有意思,于是开始入门最简单的机器算法——神经网络训练算法(NeuralNetworkTraining);以前一直觉得机器学习很高深,到处是超高等数学、线性代数、数理统计。入坑发现确实是这样!但是呢由项目实例驱动的学习比起为考试不挂科为目的的学习更为高效、实用!在遗传算法、神经网络算法的学习入门之后觉得数学只要用心看没问题的(即使是蒙特卡洛和马尔

    2022年6月10日
    50
  • 2021Eclipse安装教程

    2021Eclipse安装教程第一步下载:官网地址:https://www.eclipse.org/downloads/第二步:下载好后,双击安装包,运行第三步:选择版本运行后有很多版本可供选择EclipseIDEforJavaDevelopers是为java开发的EclipseIDEforJavaEEDevelopers是为J2EE开发的EclipseforRCP/Plug-inDevelopers是为RCP和插件开发的EclipseIDEforC/C++Developers

    2022年5月10日
    86

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号