热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android自定义输入法软键盘

本文实例为大家分享了Android自定义输入法软键盘的具体代码,供大家参考,具体内容如下 1 功能描述 触屏设备主界面中有一个文

本文实例为大家分享了Android自定义输入法软键盘的具体代码,供大家参考,具体内容如下

1 功能描述

  • 触屏设备主界面中有一个文本编辑框,底部区域固定显示一个数字键盘,键盘中除数字键外,还带有*和#键功能;
  • 提供一个自定义的数字输入法,生成apk安装包文件,嵌入到img镜像文件中去。

2 设计实现

1、创建类名为SimpleIME,继承父类InputMethodService,实现KeyboardView.OnKeyboardActionListener接口。
2、编写键盘对象加载的.xml文件。
3、重写onCreateInputView()方法,初始化键盘视图和创建键盘对象,使用键盘视图对象设置键盘的监听。
4、重写onKey、onPress、onRelease、onText、swipeDown、swipeLeft、swipeRight和swipeUp等方法,在onKey方法中可处理对键盘的操作,在这个方法里通过传入的primaryCode进行相应的操作。其他方法没有具体的实现。
5、配置清单文件的声明service,还向系统申请了IME的BIND_INPUT_METHOD权限,并且给IME添加了一个名称为android.view.InputMethod的过滤器,用来存放意图的属性。

3 贴出代码

1、SimpleIME.java

import android.inputmethodservice.InputMethodService;
import android.inputmethodservice.Keyboard;
import android.inputmethodservice.KeyboardView;
import android.media.AudioManager;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.InputConnection;

/**
 * @description: 自定义输入法
 * @version: v1.0
 * @author: yeyl
 * @date: 2018/6/26 14:57
 * @history:
 */
public class SimpleIME extends InputMethodService
 implements KeyboardView.OnKeyboardActionListener {

 private KeyboardView mKeyboardView;
 private Keyboard mKeyboard;
 /**
 * 大小写转换的flag
 */
 private boolean mCaps = false;

 @Override
 public View onCreateInputView() {
 mKeyboardView = (KeyboardView) getLayoutInflater().inflate(R.layout.layout_keyboard, null);
 mKeyboard = new Keyboard(this, R.xml.keyboard_number);
 mKeyboardView.setKeyboard(mKeyboard);
 mKeyboardView.setOnKeyboardActionListener(this);
 return mKeyboardView;
 }

 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
 return super.onKeyDown(keyCode, event);
 }

 @Override
 public void onKey(int primaryCode, int[] keyCodes) {
 InputConnection ic = getCurrentInputConnection();
 playClick(primaryCode);
 switch (primaryCode) {
  case Keyboard.KEYCODE_DELETE:
  // 回退
  ic.deleteSurroundingText(1, 0);
  break;
  case Keyboard.KEYCODE_SHIFT:
  // 大小写切换
  mCaps = !mCaps;
  mKeyboard.setShifted(mCaps);
  mKeyboardView.invalidateAllKeys();
  break;
  case Keyboard.KEYCODE_DONE:
  // 完成
  ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_ENTER));
  break;
  case Keyboard.KEYCODE_CANCEL:
  // 取消
  ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
  ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK));
  break;
  default:
  char code = (char) primaryCode;
  if (Character.isLetter(code) && mCaps) {
   code = Character.toUpperCase(code);
  }
  ic.commitText(String.valueOf(code), 1);
 }
 }

 /**
 * 播放按键音
 *
 * @param keyCode 键码
 */
 private void playClick(int keyCode) {
 AudioManager am = (AudioManager) getSystemService(AUDIO_SERVICE);
 switch (keyCode) {
  case 32:
  am.playSoundEffect(AudioManager.FX_KEYPRESS_SPACEBAR);
  break;
  case Keyboard.KEYCODE_DONE:
  case 10:
  am.playSoundEffect(AudioManager.FX_KEYPRESS_RETURN);
  break;
  case Keyboard.KEYCODE_DELETE:
  am.playSoundEffect(AudioManager.FX_KEYPRESS_DELETE);
  break;
  default:
  am.playSoundEffect(AudioManager.FX_KEYPRESS_STANDARD);
 }
 }

 @Override
 public void onPress(int primaryCode) {
 }

 @Override
 public void onRelease(int primaryCode) {
 }

 @Override
 public void onText(CharSequence text) {
 }

 @Override
 public void swipeDown() {
 }

 @Override
 public void swipeLeft() {
 }

 @Override
 public void swipeRight() {
 }

 @Override
 public void swipeUp() {
 }
}

2、layout_keyboard.xml

<&#63;xml version="1.0" encoding="UTF-8"&#63;>

3、layout_preview.xml

<&#63;xml version="1.0" encoding="utf-8"&#63;>

4、keyboard_number.xml

<&#63;xml version="1.0" encoding="utf-8"&#63;>

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

5、AndroidManifest.xml


  
  
  
  

6、method.xml

<&#63;xml version="1.0" encoding="utf-8"&#63;>

 

4 Demo截图

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


推荐阅读
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • 本文介绍了如何通过设置背景形状来轻松地为 Android 的 TextView 添加圆形边框。我们将详细讲解 XML 代码的配置,包括圆角、描边和填充等属性。 ... [详细]
  • 本文探讨了使用C#在SQL Server和Access数据库中批量插入多条数据的性能差异。通过具体代码示例,详细分析了两种数据库的执行效率,并提供了优化建议。 ... [详细]
  • 本文探讨了Java编程的核心要素,特别是其面向对象的特性,并详细介绍了Java虚拟机、类装载器体系结构、Java类文件和Java API等关键技术。这些技术使得Java成为一种功能强大且易于使用的编程语言。 ... [详细]
  • 本文详细介绍了如何在PHP中使用serialize()和unserialize()函数,以及它们在数据传输和存储中的应用。 ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 本文介绍了如何利用 Spring Boot 和 Groovy 构建一个灵活且可扩展的动态计算引擎,以满足钱包应用中类似余额宝功能的推广需求。我们将探讨不同的设计方案,并最终选择最适合的技术栈来实现这一目标。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 在进行QT交叉编译时,可能会遇到与目标架构不匹配的宏定义问题。例如,当为ARM或MIPS架构编译时,需要确保使用正确的宏(如QT_ARCH_ARM或QT_ARCH_MIPS),而不是默认的QT_ARCH_I386。本文将详细介绍如何正确配置编译环境以避免此类错误。 ... [详细]
  • 基于机器学习的人脸识别系统实现
    本文介绍了一种使用机器学习技术构建人脸识别系统的实践案例。通过结合Python编程语言和深度学习框架,详细展示了从数据预处理到模型训练的完整流程,并提供了代码示例。 ... [详细]
  • 本文详细介绍了如何使用 PHP 接收并处理微信支付的回调结果,确保支付通知能够被正确接收和响应。 ... [详细]
  • 我有一个SpringRestController,它处理API调用的版本1。继承在SpringRestControllerpackagerest.v1;RestCon ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • 理解UML的重要性及其应用
    探讨为什么大多数开发人员难以成为架构师,介绍从现实世界到业务模型的抽象过程,并详细解释UML在软件设计中的关键作用。 ... [详细]
author-avatar
惰费旧使爽DDD_540
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有