Android App实现监听软键盘按键的三种方式

发布时间 - 2026-01-10 23:22:29    点击率:

前言:

我们在Android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的“Go”按键加载url页面;在点击搜索框的时候,点击右下角的search符号键可以进行搜索;或者在全部数据输入完毕后,点击右下角的"done"就马上进行下一步操作。

效果图:

function 1:

重写Activity的dispatchKeyEvent(KeyEvent event)方法,在其中监听KeyEventKey.KEYCODE_ENTER键(右下角确定键),当此键按下的时候,隐藏输入法软键盘,设置edittext内容和加载webview内容。

@Override 
  public boolean dispatchKeyEvent(KeyEvent event) { 
    if(event.getKeyCode() == KeyEvent.KEYCODE_ENTER){ 
      /*隐藏软键盘*/ 
      InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
      if(inputMethodManager.isActive()){ 
        inputMethodManager.hideSoftInputFromWindow(MainActivity.this.getCurrentFocus().getWindowToken(), 0); 
      } 
       
      edittext.setText("success"); 
      webview.loadUrl(URL); 
      return true; 
    } 
    return super.dispatchKeyEvent(event); 
  } 

function 2:

重写dispatchKeyEvent(KeyEvent event)的方法感觉有点用牛刀的感觉,因为我们非常可能在这个方法中进行其他任务,所以我们可以使用OnKeyListener的方法来监听软键盘按键。

private OnKeyListener onKeyListener = new OnKeyListener() { 
     
    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if(keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN){ 
        /*隐藏软键盘*/ 
        InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
        if(inputMethodManager.isActive()){ 
          inputMethodManager.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0); 
        } 
         
        edittext.setText("success"); 
        webview.loadUrl(URL); 
         
        return true; 
      } 
      return false; 
    } 
  }; 
edittext.setOnKeyListener(onKeyListener); 

function 3:

第三种方法我认为可以帮助程序员更精确的判断右下角按键情况,以便应对更加复杂的情况。它可以帮助程序员依据当前邮件下为“GO”,“done”,“search”键的情况下做出更细分的操作。

edittext.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
       
      @Override 
      public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
        /*判断是否是“GO”键*/ 
        if(actionId == EditorInfo.IME_ACTION_GO){ 
          /*隐藏软键盘*/ 
          InputMethodManager imm = (InputMethodManager) v 
              .getContext().getSystemService( 
                  Context.INPUT_METHOD_SERVICE); 
          if (imm.isActive()) { 
            imm.hideSoftInputFromWindow( 
                v.getApplicationWindowToken(), 0); 
          } 
           
          edittext.setText("success"); 
          webview.loadUrl(URL); 
           
          return true; 
        } 
        return false; 
      } 
    }); 

改变软键盘右下角确定键样式:

软键盘输入法的按键并不是一成不变的,例如它的右下角的“确定”键,在有搜索框的时候就会变成带搜索图标的按键,在浏览器地址栏的时候则会变成“GO”键,我们在写App的时候也可能根据情况的不同设置输入法的“确定”键,改变方法就是给EditText控件的imeOptions属性设置成不同的值(此时Enter键可以显示不同的文字和图案)。

<EditText 
    android:id="@+id/edittext" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:singleLine="true" 
    android:imeOptions="actionSearch"/> 
  • actionNone : 回车键,按下后光标到下一行
  • actionGo : Go,
  • actionSearch : 放大镜
  • actionSend : Send
  • actionNext : Next
  • actionDone : Done,确定/完成,隐藏软键盘,即使不是最后一个文本输入框

题外话:

我在写这个demo的时候,发现了webview的一个问题,就是直接使用webview.load(url)方法会在手机上面弹出系统浏览器来访问url链接,而不是我们设置的webview,我找到的解决办法就是使用webview.setWebViewClient(....)的方法来确保url会在activity的webview上面加载。

demo下载地址android-softkeyboard_jb51.rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# android  # 软键盘监听  # 软键盘的监听  # 按键监听  # 安卓(Android) 监听按键长按事件  # 详解React Native监听Android回退按键与程序化退出应用  # Android 中的监听和按键处理详情  # 会在  # 加载  # 重写  # 按下  # 方法来  # 就会  # 我在  # 下载地址  # 完毕后  # 回车键  # 我们可以  # 我认为  # 弹出  # 它可以  # 种方法  # 一个问题  # 可以帮助  # 解决办法  # 则会  # 大家多多 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: linux写shell需要注意的问题(必看)  Laravel如何处理和验证JSON类型的数据库字段  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  Laravel如何为API生成Swagger或OpenAPI文档  Laravel如何配置任务调度?(Cron Job示例)  如何在Tomcat中配置并部署网站项目?  如何在万网ECS上快速搭建专属网站?  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  Laravel如何生成URL和重定向?(路由助手函数)  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  如何获取PHP WAP自助建站系统源码?  实例解析Array和String方法  简历没回改:利用AI润色让你的文字更专业  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  微信小程序 五星评分(包括半颗星评分)实例代码  jquery插件bootstrapValidator表单验证详解  Laravel如何使用Livewire构建动态组件?(入门代码)  Laravel集合Collection怎么用_Laravel集合常用函数详解  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  Laravel如何发送系统通知?(Notification渠道示例)  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  jQuery 常见小例汇总  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  三星网站视频制作教程下载,三星w23网页如何全屏?  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  如何选择可靠的免备案建站服务器?  详解Oracle修改字段类型方法总结  Laravel怎么在Blade中安全地输出原始HTML内容  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  网站制作企业,网站的banner和导航栏是指什么?  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  如何用VPS主机快速搭建个人网站?  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  简单实现Android文件上传  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  如何快速打造个性化非模板自助建站?  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  Python自动化办公教程_ExcelWordPDF批量处理案例  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  太平洋网站制作公司,网络用语太平洋是什么意思?  利用python获取某年中每个月的第一天和最后一天  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  Python文件操作最佳实践_稳定性说明【指导】