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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何修改手机桌面软件名称_安卓软件如何改名字

    如何修改手机桌面软件名称_安卓软件如何改名字安卓手机怎么修改桌面上软件的名字呀!以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!安卓手机怎么修改桌面上软件的名字呀!使用360手机桌面,在图标上长按可以直接改。或者你使用apkeditor修改软件安装包求助,怎么修改桌面上软件的图标和名字如果是快捷方式的话,点击右键-》属性,在常规选项卡下修改名字,在快捷方式选项卡…

    2022年9月23日
    0
  • 8000—0004显示设备出现问题_错误0x8007005

    8000—0004显示设备出现问题_错误0x8007005关于COM类工厂80070005和8000401a错误分析及解决办法 问题描述:最近做一个web应用程序需要操作Excel文件,在开发环境下程序测试正常,部署到IIS后程序操作Excel文件,IIS报错,错误出现在创建Excel进程的语句,如下:Application myExcelApp= new ApplicationClass(); IIS提示信息如下:检索 COM 类

    2022年8月20日
    5
  • Lua使用心得(2)

    在lua脚本调用中,如果我们碰到一种不好的脚本,例如:while1dodoend那我们的程序主线程也会被阻塞住。那我们如何防止这种问题呢?下面就给出一个解决的办法。首先为了不阻塞主线程,

    2021年12月25日
    53
  • 美丽的表格样式(使用CSS样式表控制表格样式)

    美丽的表格样式(使用CSS样式表控制表格样式)

    2021年12月1日
    97
  • 看过spring源码吗_thinkphp源码分析

    看过spring源码吗_thinkphp源码分析概述

    2022年8月12日
    3
  • eclipse导入web项目进行部署并运行

    eclipse导入web项目进行部署并运行eclipse导入web项目进行部署并运行eclipse导入web项目操作总结web项目部署eclipse导入web项目导入项目前默认已经配置好web项目开发环境,未配置好请点击这儿左键单击File,选择Import…,或者直接在工作区空白处右击选择Import,再选择Import…选择General文件下的ExistingprojectsintoWorkspace,将项目导入到工作区中选择Browse选择要导入的项目,然后在Options中的copyprojectintoproje

    2025年5月26日
    0

发表回复

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

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