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文件操作最佳实践_稳定性说明【指导】

