Android API 28+ View监听按键事件的处理方式
发布日期:2021-05-10 04:59:21 浏览次数:27 分类:精选文章

本文共 2383 字,大约阅读时间需要 7 分钟。


在Android系统中,view的键盘事件处理方式在不同API版本中有不同的实现方式。以下是API28之前和API28及之后的对比:

API28之前:

view.setOnKeyListener(new View.OnKeyListener() { 
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
return true;
}});

API28及之后:

ViewCompat.addOnUnhandledKeyEventListener(view, new ViewCompat.OnUnhandledKeyEventListenerCompat() { 
@Override
public boolean onUnhandledKeyEvent(View v, KeyEvent event) {
return true;
}});

在API28之前,view实现了直接的onKeyListener接口,而在API28及之后,Google引入了ViewCompat和ViewCompat.OnUnhandledKeyEventListenerCompat接口来统一处理未处理的键盘事件,以更好地支持跨版本兼容性。这意味着对于API28及之后的版本,开发者可以使用ViewCompat来设置键盘事件监听器,这种方法在许多情况下是更好的选择,因为它提供了与不同版本的更好的兼容性。

需要注意的是,在使用ViewCompat的方法时,您需要确保适当处理未处理的键盘事件,以避免与其他应用程序的键盘事件处理产生冲突。根据Google的文档,直接使用onKeyListener是在之后的版本中被推荐的做法(在API28及之前),但从API28开始,ViewCompat的方法更为合适。

如果您需要更深入的探讨这个话题,可以参考Android官方文档:Android Keyboard Event Handling


Android视图和键盘事件处理方法对比

在Android系统中, view的键盘事件处理方式在不同API版本中有所不同.以下是对API28之前和API28及之后方法的详细对比:

API28之前

以下是API28之前版本中使用的方法:

view.setOnKeyListener(new View.OnKeyListener() { 
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
return true;
}});

API28及之后

在API28及之后版本, Google引入了新的ViewCompat方法来统一处理键盘事件.以下是如何在新版本中实现的方法:

ViewCompat.addOnUnhandledKeyEventListener(view, new ViewCompat.OnUnhandledKeyEventListenerCompat() { 
@Override
public boolean onUnhandledKeyEvent(View v, KeyEvent event) {
return true;
}});

关键差异

  • API版本依赖:

    • API28之前需要直接使用view.setOnKeyListener, 该方法直接为View对象注册键盘事件监听器.
    • API28及之后使用ViewCompat.addOnUnhandledKeyEventListener, 该方法通过引入ViewCompat提供统一的键盘事件处理接口.
  • 兼容性:

    • 在API28及之前版本中, 需要为每个View单独注册键盘事件监听器.
    • 在API28及之后版本中, 使用ViewCompat可以简化事件监听过程, 并提高跨版本兼容性.
  • 默认行为:

    • API28之前的onKeyListener方法允许完全控制键盘事件, 包括返回false以抑制默认处理.
    • 在API28及之后版本中, ViewCompat.OnUnhandledKeyEventListenerCompat默认会抑制未被处理的键盘事件, 从而避免重复或默认的系统行为.
  • 选择方法的注意事项

    在选择使用哪种方法时, 需要根据项目的具体需求来决定. 如果您的应用需要对键盘事件进行细致控制, 则在API28及之后版本中继续使用view.setOnKeyListener可能会更合适. 然而, 如果您的应用希望以更现代的方式处理键盘事件并提高兼容性, 则应考虑使用ViewCompat.

    示例代码

    以下是一个在API28及之后版本中实现键盘事件处理的示例代码:

    ViewCompat.addOnUnhandledKeyEventListener(yourView, new ViewCompat.OnUnhandledKeyEventListenerCompat() {
    @Override
    public boolean onUnhandledKeyEvent(View view, KeyEvent event) {
    // 简单示例: 在这里处理键盘事件
    return true;
    }
    });

    该方法会自动抑制未处理的键盘事件, 从而避免系统默认行为. 如果需要自定义处理键盘事件, 需要在事件监听器中返回true以继续事件传递.

    通过以上方法, 开发者可以根据项目需求选择适合的键盘事件处理方式.

    上一篇:设计模式(七)—— 装饰器模式
    下一篇:Java集合

    发表评论

    最新留言

    初次前来,多多关照!
    [***.217.46.12]2025年04月23日 12时36分17秒