Android EditText的setOnEditorActionListener方法——监听软键盘按键

2023-11-16

1、控件EditText的setOnEditorActionListener方法的使用

setOnEditorActionListener这个方法,并不是在我们点击EditText的时候触发,也不是在我们对EditText进行编辑时触发,而是在我们编辑完之后点击软键盘上的各种键才会触发。

通过 布局文件 中的imeOptions可以控制软件盘右下角的按钮显示为不同按钮。所以和EditorInfo搭配起来可以实现各种软键盘的功能。
imeOptions=”actionUnspecified” –> EditorInfo.IME_ACTION_UNSPECIFIED
imeOptions=”actionNone” –> EditorInfo.IME_ACTION_NONE
imeOptions=”actionGo” –> EditorInfo.IME_ACTION_GO
imeOptions=”actionSearch” –> EditorInfo.IME_ACTION_SEARCH
imeOptions=”actionSend” –> EditorInfo.IME_ACTION_SEND
imeOptions=”actionNext” –> EditorInfo.IME_ACTION_NEXT
imeOptions=”actionDone” –> EditorInfo.IME_ACTION_DONE

布局中定义一个EditText控件

 <EditText
        android:id="@+id/ET_phonenumber"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@id/buttonAdd"
        android:hint="@string/enter_new_note" 
        android:imeOptions="actionDone"// 这里和onEditorAction中actionId对应。
        android:inputType="text"/>

添加setOnEditorActionListener方法

ET_phonenumber.setOnEditorActionListener(new OnEditorActionListener() {  
            @Override  
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {  
               if (actionId == EditorInfo.IME_ACTION_DONE) {   
                // 按下完成按钮,这里和上面imeOptions对应
                text.setText("Editing EditorInfo.IME_ACTION_DONE");  
                return false;   //返回true,保留软键盘。false,隐藏软键盘
                }
            }  
        });  

2、 android 软件盘事件响应:android: imeOptions 、KeyEvent、android: inputType

android 软件盘事件响应:
在android中,有时需要对EditText实现软件盘监听的场景。当android按下软键盘的时候,响应完成、发送、搜索或者其他事件。
Google 提供了 EditorInfo、KeyEvent 的一些方法,能够实现我们需要的功能。详细可研究:EditorInfo.class 和 KeyEvent.class.

2.1 EditorInfo

把EditText的ImeOptions属性设置成不同的值,Enter键上可以显示不同的文字或图案。
actionNone :回车键,按下后光标到下一行
actionGo : Go
actionSearch : 一个放大镜
actionSend : Send
actionNext : Next
actionDone : Done,隐藏软键盘,即使不是最后一个文本输入框

监听方法:

private final EditText.OnEditorActionListener editorActionListener =
           new TextView.OnEditorActionListener() {
               @Override
               public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                   if (actionId == KeyEvent.ACTION_DOWN || actionId == EditorInfo.IME_ACTION_DONE) {
                       //业务代码
                       haoMent.createTest(Test.getId(), v.getText().toString());
                       UiUtils.hideSoftKeyboard(getApplicationContext(), haoTest.this);
                       v.setText("");
                       v.clearFocus();
                       handler.post(updateView);
                   }
                   return true;
               }
          };
2.2 KeyEvent

如果手机的输入法不是内置输入法,而是其他第三方输入法,那么可能会发生软件盘回车键无响应的问题。为了防止该类事情,响应的其KeyEvent。

在代码中添加事件响应:

 
inputKey = (EditText) findViewById(R.id.contactSearch_editText);
inputKey.addTextChangedListener(watcher);
 
inputKey.setOnKeyListener(new View.OnKeyListener() {
@Override
  public boolean onKey(View v, int keyCode, KeyEvent event) {
    
 
  if (KeyEvent.KEYCODE_ENTER == keyCode && event.getAction() == KeyEvent.ACTION_DOWN) {
    handler.post(updateView);
    return true;
  }
  return false;
  }
});
//响应键盘内容
public TextWatcher watcher = new TextWatcher() {
 
  @Override
  public void beforeTextChanged(CharSequence charSequence, int i, int i2,int i3) {
 
  }
 
  @Override
  public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
 
  }
 
  @Override
  public void afterTextChanged(Editable editable) {
 
  handler.post(updateView);
 
  }
};
2.3 android 输入类型:android:inputType
android:inputType="none"--输入普通字符
android:inputType="text"--输入普通字符
android:inputType="textCapCharacters"--输入普通字符
android:inputType="textCapWords"--单词首字母大小
android:inputType="textCapSentences"--仅第一个字母大小
android:inputType="textAutoCorrect"--前两个自动完成
android:inputType="textAutoComplete"--前两个自动完成
android:inputType="textMultiLine"--多行输入
android:inputType="textImeMultiLine"--输入法多行(不一定支持)
android:inputType="textNoSuggestions"--不提示
android:inputType="textUri"--URI格式
android:inputType="textEmailAddress"--电子邮件地址格式
android:inputType="textEmailSubject"--邮件主题格式
android:inputType="textShortMessage"--短消息格式
android:inputType="textLongMessage"--长消息格式
android:inputType="textPersonName"--人名格式
android:inputType="textPostalAddress"--邮政格式
android:inputType="textPassword"--密码格式
android:inputType="textVisiblePassword"--密码可见格式
android:inputType="textWebEditText"--作为网页表单的文本格式
android:inputType="textFilter"--文本筛选格式
android:inputType="textPhonetic"--拼音输入格式
android:inputType="number"--数字格式
android:inputType="numberSigned"--有符号数字格式
android:inputType="numberDecimal"--可以带小数点的浮点格式
android:inputType="phone"--拨号键盘
android:inputType="datetime"
android:inputType="date"--日期键盘
android:inputType="time"--时间键盘
密码框属性 android:password="true"   让EditText显示的内容自动为星号,输入时内容会在1秒内变成*字样。

纯数字 android:numeric="true"      让输入法自动变为数字输入键盘,同时仅允许0-9的数字输入

仅允许 android:capitalize="haoTest"   仅允许接受输入haoTest,一般用于密码验证

android:editable="false"         设置EditText不可编辑

android:singleLine="true"        强制输入的内容在单行

android:ellipsize="end"         自动隐藏尾部溢出数据,一般用于文字内容过长一行无法全部显示时
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android EditText的setOnEditorActionListener方法——监听软键盘按键 的相关文章

  • 如何使用 Android 和 (7.0) 使用 Google API 创建 AVD?

    当我下载并为 AVD 选择 N API 24 时 我在右下角看到以下消息 考虑使用带有 Google API 的系统映像来启用 Google Play 服务测试 此图片还不能使用吗 或者我错过了什么 我在 SDK 管理器中还没有看到它 从
  • 以编程方式设置 imageView 的宽高比

    我在显示没有 centerCrop 的横向图像时遇到问题 我试过PercentFramelayout 并以编程方式设置纵横比 像这样 laParams percentLayoutInfo aspectRatio img width toFl
  • ScrollView 与relativelayout 不能很好地配合

    所以我有一个 ScrollView 作为布局中的最高级别 在我的 ScrollView 中我有一个包含其他视图的相对布局 问题在于 RelativeLayout 没有按应有的方式覆盖整个布局 它会在大约一半的屏幕处被截断 它的宽度是屏幕的整
  • 有多少用户获得了更新的应用版本

    我最近将新版本的 Android 应用程序推送到了 Play 商店 并想看看有多少用户已经成功获取更新 似乎有关于 Android 版本和正在使用的设备的统计数据 但我似乎无法找到有关我的用户正在使用的应用程序版本的任何信息 Go to h
  • LazyAdapter 上的 TextView 显示错误数据

    我已经基于此成功使用 ListView 和 LazyAdapter 构建了一个应用程序link https stackoverflow com questions 541966 android how do i do a lazy load
  • 无法将 LocalBroadcastManager 添加到 Android Studio 中的项目

    我想我现在已经尝试了一切 我一直在堆栈溢出 我什至咨询过android文档 这里的大多数帖子都展示了如何在 Eclipse 中添加 jar 文件 android 工具 gt 添加支持库 或其他内容 所以我尝试按照文档告诉我的方式进行操作 方
  • 在 Android 中以高音量录制

    我正在使用 MediaRecorder 进行音频录制 但不幸的是 当我播放录制的音频时 我的媒体音量非常低 我什么也没听到 几乎什么也没听到 有没有办法提高录音音量 就像我们录音时的 setVolume 一样 我尝试在 MediaRecor
  • 如何在 Android 中将 EditText 绘制到画布上?

    我想画画 EditText username new EditText context 到我画布上的特定位置 protected void onDraw Canvas canvas 是否可以在基础上画出x y在我的 Java 文件中协调而不
  • 将 Cordova console.log 写入文件

    有谁知道是否有可能console log写入文件或类似的东西 我已经记录了我的应用程序 但它仅写在控制台上 出于远程目的debugging我也需要将现有日志写入文件 我想创建一个文件并将日志写入该文件中 但这将使我复制现有的日志代码 因此
  • 尝试使用 FileProvider(Android) 获取 URI 时出现 NullPointerException [重复]

    这个问题在这里已经有答案了 我想在单击按钮后拍照 但我越来越NullPointerException当试图得到URI with FileProvider 这是我的错误代码 Caused by java lang NullPointerExc
  • Android AsyncTask onPreExecute 未不确定地调用

    我有一个 AsyncTask 它应该在通过互联网上传一些内容时显示进度条 有时它就像一个魅力 有时它不显示任何进度条 这是代码 public class Upload extends AsyncTask
  • 如何以编程方式在 Android 中的特定 firebase FCM 注册令牌上发送推送通知

    我想知道有什么方法可以在特定的 FCM 注册令牌 设备令牌 上以编程方式发送推送通知 我已经实现了群聊 但陷入了一对一的聊天 我根本不想使用任何网络服务或任何后端 因为我在我的应用程序中使用 Firebase 数据库和存储作为后端 我想将上
  • Android中如何使用ScrollView?

    我有一个 XML 布局文件 但文本超出了屏幕尺寸 我需要做什么才能制作ScrollView
  • Android 上的推送通知:IBM MQTT

    我对 Android 环境非常陌生 必须使用上给出的 wmqtt jar 示例应用程序来设置客户端http www 01 ibm com support docview wss http www 01 ibm com support doc
  • 如何限制 Android 设备网络速度以进行测试

    我正在测试一个 Android 应用程序 该应用程序在低质量网络上管理其内容时遇到一些问题 我无法验证问题是否仍然存在 因为以我家的网络速度 120mb s 在我设法开始复制路线之前 所有内容都已经下载完毕 在这种情况下 不能选择使用 An
  • 如何将我的自定义相机应用程序设置为默认应用程序?

    如果我使用以下代码 Intent takePictureIntent new Intent MediaStore ACTION IMAGE CAPTURE startActivityForResult takePictureIntent 1
  • Android:如何以编程方式仅圆化位图的顶角?

    我目前正在使用这段代码 Override public Bitmap transform Bitmap source Bitmap result Bitmap createBitmap source getWidth source getH
  • Spotify API:INVALID_APP_ID

    我目前正在开发一个实现 Spotify API 的 Android 应用程序 我已经使用教程将我的应用程序连接到 Spotify 的所有代码 并且已经在我的应用程序上工作了一段时间了 当我在验证用户身份后通过我的应用程序播放歌曲时 它在我的
  • 为什么Android模拟器这么慢?我们怎样才能加快Android模拟器的速度呢?

    想要改进这篇文章吗 提供此问题的详细答案 包括引用和解释为什么你的答案是正确的 不够详细的答案可能会被编辑或删除 我有一个2 67GHz 赛扬处理器 以及1 21GB RAM 上x86视窗XP专业机器 我的理解是安卓模拟器在这样的机器上应该
  • androidx Recycler View 匹配约束 (0dp) 与换行内容行为

    我这里有简单的回收器视图 我想要的是 当列表很短时 将按钮粘贴到回收器视图下方 当列表很长时 将按钮粘在屏幕底部 但回收器视图正确换行并且能够滚动到底部

随机推荐

  • Base64 转 文件下载

    将base64字符串转化为文件 1 将下面代码另存为html文件 2 用浏览器打开 3 点击下载 代码如下 div 输入base64字符串 div
  • opensips之yyparse( )

    parse the config file prior to this only default values e g for debugging settings will be used yyin cfg stream if yypar
  • HTTPS协议详解

    文章目录 一 HTTPS是什么 二 HTTPS的工作过程 引入对称加密 引入非对称加密 引入证书 总结 三 HTTPS 与 HTTP 的区别 区别 HTTPS的优缺点 总结 一 HTTPS是什么 HTTPS HTTPS 也是一个应用层协议
  • stm32f10x 时钟系统详解/时钟树/时钟初始化/SystemInit函数全注解

    STM32F10x 时钟系统初学总结 一 时钟系统 1 概述 用通俗的话来说 时钟是单片机的 脉搏 是单片机的驱动源 使用单片机中的任何一个外设都必须打开此外设相应的时钟 这样的好处是 在不使用某个外设的时候 关闭此时钟外设 从而可以降低系
  • 合并两个有序链表(精美图示详解哦)

    全文目录 引言 合并两个有序链表 题目描述 方法一 将第二个链表合并到第一个 思路 实现 方法二 尾插到哨兵位的头节点 思路 实现 总结 引言 在前面两篇文章中 我们介绍了几道链表的习题 反转链表 链表的中间结点 链表的倒数第k个结点 戳我
  • 深度学习实战28-AIGC项目:自动生成定制化的PPT文件

    大家好 我是微学AI 今天给大家介绍一下深度学习实战28 AIGC项目 自动生成定制化的PPT文件 AIGC项目是一个基于自然语言处理技术的创新性项目 旨在利用ChatGPT模型生成定制化的PPT文件 该项目主要应用于商务和教育领域 可以帮
  • 中文NLP的第二步:分词转词表ID,基于 PaddleHub 实现(学习心得)

    上一步我们做了分词 中文NLP的第一步 分词 基于 PaddleHub 实现 绝对小白友好 学习心得 第二步是把分词结果 对照词表转化成 ID 词表是什么呢 首先我们要知道 中文字符是没办法直接计算的 更不要说进一步的操作了 所以我们需要的
  • qmake常用语法

    qmake常用语法 一 注释 用 注释 表示到行尾均为注释 二 include 包含别的文件 例如 include xx pri 类似于c 的 include 三 平台宏 win32 macx unix linux g 等 分别对应于win
  • HDU--1864:最大报销额 DP求最大和(最大和有上限)

    1 题目源地址 http acm hdu edu cn showproblem php pid 1864 2 简要分析 这道题看起来不难 求最大报销额 想法是先找到符合要求的发票 然后求符合要求的发票的最大报销金额 但是 这道题的陷阱好几个
  • 【目标检测】3、SPPNet

    SPPNet Spatial Pyramid Pooling 空间金字塔池化 一般的CNN结构中 对输入大小要求固定 但在现实中通常会使用crop和warp来将大小统一 这样做会破坏图像的纵横比 何凯明提出了SPP 连接在最后一层卷积层 下
  • C++ 算法学习 之 sort

    这里写目录标题 sort函数 简单使用 通过上面的两个列子发现sort用的参数不一样为什么 进一步理解sort 那我们怎么进行自定义排序呢 力扣题目 c 官网手册 sort 参考于官网 sort函数 std sort 函数是C 标准库中提供
  • Python3.7+RobotFramework自动化测试框架环境搭建-重装

    Python3 7 RobotFramework自动化测试框架环境搭建 学习笔记 一 环境搭建 1 安装Python3 7 2 2 安装相关的库 request库 robotframework库 robotframework request
  • C++实现softmax函数(std::vector)

    参考博客 激活函数之softmax介绍及C 实现及其评论区 Lambda使用参考博客 C 11 Lambda表达式 函数功能 输入vector
  • CSS(三)

    目录 CSS三大特性 层叠性 继承性 优先级 层叠性 继承性 优先级 页面布局三大核心 盒子模型 浮动 定位 CSS盒子模型 网页布局过程 盒子模型组成 编辑 编辑 边框 border 内边距 padding 外边距 margin PS基本
  • 基于github搭建的个人博客

    刚开始我也是很不理解为什么要利用github hexo搭建博客 现在差不多能理解 首先逼格很高 其次用github搭建可以学习使用github并且空间很大 也可以便于交流 再次声明本篇是基于windows系统下搭建的博客 废话不多说开始 搭
  • 借助Redis锁,完美解决高并发秒杀问题

    目录 1 单机环境下的锁 2 分布式情况下使用Redis锁 3 一台服务宕机 导致无法释放锁 4 给每一把锁加上过期时间 5 延长锁的过期时间 解决锁失效 6 使用Redisson简化代码 场景 一家网上商城做商品限量秒杀 1 单机环境下的
  • JAVA-注册成功后,通过多线程发送短信的使用场景

    场景 在日常的系统中 使用前的第一步往往是需要注册 只有注册后获得登录账号和密码才能正常使用系统 有些系统在注册成功后 还会往用户的手机发送一条注册成功的短信通知 这个并不属于主线流程 也就是说发不发送该短信通知 用户都已经能登录系统了 那
  • mapbox创建自定义marker图标绑定弹框展示信息

    创建自定义marker图标绑定弹框 let carMarker 存放marker图标 for let m 0 m
  • 怎么查看本地服务器信息,查看本地服务器url地址

    查看本地服务器url地址 内容精选 换一换 OBS Browser 是一款用于访问和管理对象存储服务的图形化工具 支持通过配置内网DNS服务器地址的方式 使在华为云上的Windows ECS通过内网直接访问OBS 下面将介绍具体其操作流程和
  • Android EditText的setOnEditorActionListener方法——监听软键盘按键

    文章目录 1 控件EditText的setOnEditorActionListener方法的使用 2 android 软件盘事件响应 android imeOptions KeyEvent android inputType 2 1 Edi