Android,Android 仿微信自定义数字键盘的实现代码
如何进行Android应用的自定义键盘和输入法开发(八)

Android应用的自定义键盘和输入法开发是一个具有一定挑战性的任务,但也是一个充满创造力和乐趣的过程。
在这篇文章中,我们将探讨如何进行Android应用的自定义键盘和输入法开发,带您深入了解这个领域的知识和技术。
一、理解Android键盘和输入法在开始自定义键盘和输入法开发之前,我们首先需要了解Android键盘和输入法的工作原理。
Android中的键盘和输入法是基于InputMethodManager类实现的,通过监听用户的输入行为,将输入内容传递给应用程序。
二、键盘布局设计设计键盘布局是自定义键盘的第一步。
在Android中,键盘布局由一个xml文件定义。
在这个文件中,您可以指定键盘的外观和按键的功能。
您可以选择使用系统提供的键盘布局,也可以根据自己的需求定义一个新的键盘布局。
在设计键盘布局时,需要考虑以下几个方面:1. 键盘的大小和外观:您可以设置键盘的宽度和高度,以及键盘按键的样式和颜色。
2. 键盘按键的功能:您可以给每个按键指定一个功能,例如字母、数字、符号等。
三、输入法服务自定义键盘的下一步是创建一个输入法服务。
输入法服务是一个运行在后台的服务,负责接收用户输入,并将输入内容传递给应用程序。
在创建输入法服务时,您需要实现InputMethodService类,并覆盖其方法来处理用户的输入和键盘事件。
您还可以调用InputMethodManager类的方法来控制键盘的显示和隐藏。
四、输入法界面输入法界面是输入法的可见部分,它允许用户与键盘进行交互。
您可以自定义输入法界面的样式和布局,添加功能和特效。
在创建输入法界面时,您可以使用Android提供的一些UI组件,如EditText、TextView等。
您还可以使用自定义的布局文件来设计输入法界面,以满足您的需求。
五、实现基本功能在自定义键盘和输入法开发中,有一些基本的功能是需要实现的。
其中包括:1. 键盘切换:您可以实现多个键盘布局,并提供一个切换按钮,使用户能够在不同的键盘布局之间进行切换。
如何进行Android应用的自定义键盘和输入法开发(五)

Android操作系统提供了强大的自定义能力,使开发者能够为用户提供更加个性化的用户体验。
其中,自定义键盘和输入法开发是一个备受关注的话题。
本文将探讨如何进行Android应用的自定义键盘和输入法开发。
首先,让我们了解一下自定义键盘和输入法的概念。
在Android系统中,键盘和输入法是用户与设备进行交互的重要方式,它们负责接收用户的输入并将其转化为可理解的文本或命令。
通常情况下,键盘和输入法是由Android系统默认提供的,但是有时候用户的个性化需求无法被满足,这就需要开发者进行自定义键盘和输入法的开发。
要进行自定义键盘和输入法的开发,首先需要了解Android系统的输入法框架。
Android系统中的输入法框架是一个开放的框架,开发者可以通过扩展现有的输入法服务来实现自定义的键盘和输入法功能。
开发者可以通过创建一个新的输入法类,并根据自己的需求进行相关的配置和调整。
同时,为了提供更好的用户体验,开发者还可以定制键盘的布局、主题和样式等。
在进行自定义键盘和输入法开发之前,需要先了解输入法框架的相关概念和机制。
其中,最重要的概念是输入法服务(InputMethodService)和输入法视图(InputMethodView)。
输入法服务是一个继承自InputMethodService的类,负责处理用户的输入和显示输入框。
输入法视图是一个继承自View的类,负责显示键盘布局和处理用户的输入事件。
通过对这两个类的扩展,开发者可以实现自定义键盘和输入法的功能。
接下来,让我们详细了解一下自定义键盘和输入法的开发流程。
首先,需要创建一个新的输入法类,并继承自InputMethodService。
在该类中,开发者需要重写一些关键的方法,例如onCreateInputView()、onCreateCandidatesView()和onEvaluateInputViewShown()等。
通过这些方法,开发者可以创建自定义的输入框、候选词视图和控制输入框的显示与隐藏。
Android实现键盘弹出界面上移的实现思路,android 自定义键盘

Android 实现键盘弹出界面上移的实现思路,android 自定义键盘1.首先说一下思路:基本就是结合layout 中scrollview 视图和androidmanifest.xml 中activity 中的android:windowsoftinputmode 属性配置实现;2.要了解android:windowsoftinputmode 相应的可以配置项:activity 主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,android1.5后的一个新特性。
这个属性能影响两件事情:1.当有焦点产生时,软键盘是隐藏还是显示2.是否减少活动主窗口大小以便腾出空间放软键盘windowsoftinputmode 的设置必须是下面列表中的一个值,或一个”state…”值加一个”adjust…”值的组合。
在任一组设置多个值――多个”state…”values ,例如&mdash 有未定义的结果。
各个值之间用|分开。
例如:<activity android:windowsoftinputmode="statevisible|adjustresize". . . >在这设置的值(除"stateunspecified"和"adjustunspecified"以外)将覆盖在主题中设置的值各值的含义:stateunspecified :软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置stateunchanged :当这个activity 出现时,软键盘将一直保持在上一个activity 里的状态,无论是隐藏还是显示 statehidden :用户选择activity 时,软键盘总是被隐藏statealwayshidden :当该activity 主窗口获取焦点时,软键盘也总是被隐藏的statevisible :软键盘通常是可见的statealwaysvisible :用户选择activity 时,软键盘总是显示的状态adjustunspecified :默认设置,通常由系统自行决定是隐藏还是显示adjustresize :该activity 总是调整屏幕的大小以便留出软键盘的空间adjustpan :当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分例如:androidmanifest.xml 文件中界面对应的<activity>里加入android:windowsoftinputmode="adjustpan" 键盘就会覆盖屏幕android:windowsoftinputmode="statevisible|adjustresize" 屏幕整体上移(结合scrollview 实现)android:windowsoftinputmode="adjustpan|statehidden" 软键盘弹出,界面布局不变,这是解决弹出软键盘,界面整体被压缩的方式(会导致整个界面上移动,显示效果不好)3.具体实现3.1定义scrollview[Java] 查看源文件 复制代码?01 02 03 04 05 06 <scrollviewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:fitssystemwindows="true"android:scrollbars="vertical"><linearlayout07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><textviewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/set_account_info"android:layout_margintop="@dimen/business_management_title_top"style="@style/large_size_home_main_color_style"android:layout_gravity="center_horizontal"/><relativelayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:layout_margintop="@dimen/add_confirm_top"android:focusable="true"android:focusableintouchmode="true"><textviewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/add_accout_bank_title"style="@style/cheque_collection_hint"android:layout_alignbaseline="@+id/accout_bank"android:text="@string/accout_bank"/><edittextandroid:layout_width="@dimen/add_account_code_w"android:layout_margintop="@dimen/common_gap"android:layout_torightof="@+id/add_accout_bank_title"style="@style/cheque_collection_et"android:id="@+id/accout_bank"/></relativelayout><buttonandroid:id="@+id/confirm_add_btn"android:layout_width="wrap_content"android:layout_height="wrap_content"style="@style/common_btn_style"android:layout_gravity="center_horizontal"android:layout_margintop="@dimen/add_confirm_top"android:text="@string/confirmed" /></linearlayout></scrollview>即scrollview 中包裹edittext 等内容;3.2为androidmanifest.xml 文件中activity 添加android:windowsoftinputmode="statehidden|adjustresize"属性[Java] 查看源文件 复制代码?1 2 3 <activity android:name=".ui.addaccountactivity" android:windowsoftinputmode="statehidden|adjustresize" android:screenorientation="landscape"/>说明:statehidden :进入activity 默认隐藏键盘,通常需要看见整个页面,用户需要输入时点击输入框;adjustresize :界面调整大小,键盘留在底部,scrollview 内容可以滚动,这样就继续可以看到整个页面;scrollview 通常不要设置android:fillviewport="true"(作用就是布满整个屏幕即使内容高度没有屏幕的高度)属性(看实际需要吧),android:fillviewport="true"导致界面无法滚动,api 19,21有这个问题,api 27没有这个问题,主要看你适配的版本和需求了;3.3效果图如下总结。
如何进行Android应用的自定义键盘和输入法开发(三)

如何进行Android应用的自定义键盘和输入法开发随着移动设备的普及,Android应用的开发需求也越来越多样化。
其中,自定义键盘和输入法的开发是一个越来越受欢迎的领域。
自定义键盘和输入法能够给用户带来更好的使用体验,满足个性化需求。
本文将介绍如何进行Android应用的自定义键盘和输入法开发。
1. 理解Android输入法框架在开始自定义键盘和输入法的开发之前,我们首先需要了解Android输入法框架。
Android输入法框架是一个强大的工具,它提供了丰富的API和接口,使我们能够定制化各种键盘和输入法。
我们可以通过扩展Android输入法框架来创建我们自己的键盘和输入法。
2. 创建自定义键盘布局自定义键盘的第一步是创建一个自定义布局。
我们可以使用XML文件来定义我们的键盘布局。
在布局中,我们可以包括各种按钮、文本框等。
通过合理的布局设计,我们可以实现键盘的各种功能,如数字键盘、符号键盘等。
此外,我们还可以为键盘添加样式和主题,使其更加美观和易于使用。
3. 处理键盘事件在自定义键盘中,键盘事件的处理非常重要。
我们需要在代码中定义各个按键的响应动作。
通过监听按键事件,我们可以实现各种功能,如文本输入、删除字符等。
在处理键盘事件时,我们可以使用Android提供的KeyEvent类来获取按键的信息,如按键码、按键状态等。
通过合理的事件处理,我们能够实现键盘的各种功能,提高用户的使用体验。
4. 创建自定义输入法除了自定义键盘,我们还可以创建自定义输入法。
自定义输入法是一种更加灵活和强大的方式,它可以提供更多个性化的输入功能。
创建自定义输入法的方法与创建自定义键盘类似,只是在布局和事件处理上有所区别。
我们可以在自定义输入法中加入更多的输入选项,如手写输入、语音输入等。
通过灵活运用Android输入法框架,我们能够创建功能丰富、个性化的输入法。
5. 优化用户体验在进行自定义键盘和输入法开发时,我们还需要考虑用户体验的优化。
android代码设置EditText只输入数字、字母

--------------------------------------------------------------------------------------------
1. 密码框属性 android:password="true"
这条可以让EditText显示的内容自动为 星号,输入时内容会在1秒内变成*字样。
2. 纯数字 android:numeric="true"
这条可以让输入法自动变为数字输入键盘,同时仅允许0-9的数字输入
3. 仅允许 android:capitalize="cwj1987"
DigitsKeyListener(false,true);05.et.setKeyListener(numericOnlyListener);06.//
方法2:为EditText设置一个NumberKeyListener,然后重写getAcceptedChars()方法和getInputType()方法07.et.setKeyListener(new NumberKeyListener() {08. @Override09. protected char[] getAcceptedChars() {10. return new char[] { '1', '2', '3', '4', '5', '6', '7', '8','9',
Android自定义输入法软键盘

Android⾃定义输⼊法软键盘本⽂实例为⼤家分享了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.javaimport 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 InputMethodServiceimplements KeyboardView.OnKeyboardActionListener {private KeyboardView mKeyboardView;private Keyboard mKeyboard;/*** ⼤⼩写转换的flag*/private boolean mCaps = false;@Overridepublic View onCreateInputView() {mKeyboardView = (KeyboardView) getLayoutInflater().inflate(yout_keyboard, null);mKeyboard = new Keyboard(this, R.xml.keyboard_number);mKeyboardView.setKeyboard(mKeyboard);mKeyboardView.setOnKeyboardActionListener(this);return mKeyboardView;}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {return super.onKeyDown(keyCode, event);}@Overridepublic 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);}mitText(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);}}@Overridepublic void onPress(int primaryCode) {}@Overridepublic void onRelease(int primaryCode) {}@Overridepublic void onText(CharSequence text) {}@Overridepublic void swipeDown() {}@Overridepublic void swipeLeft() {}@Overridepublic void swipeRight() {}@Overridepublic void swipeUp() {}}2、layout_keyboard.xml<?xml version="1.0" encoding="UTF-8"?><android.inputmethodservice.KeyboardView xmlns:android="/apk/res/android" android:id="@+id/keyboard"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:keyPreviewLayout="@layout/layout_preview" />3、layout_preview.xml<?xml version="1.0" encoding="utf-8"?><TextView xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#FFFF00"android:gravity="center"android:textSize="30sp"android:textStyle="bold" />4、keyboard_number.xml<?xml version="1.0" encoding="utf-8"?><Keyboard xmlns:android="/apk/res/android"android:horizontalGap="0px"android:keyWidth="33.3%p"android:keyHeight="9%p"android:verticalGap="0px"><Row><Keyandroid:codes="49"android:keyEdgeFlags="left"android:keyLabel="1" /><Keyandroid:codes="50"android:keyLabel="2" /><Keyandroid:codes="51"android:keyEdgeFlags="right"android:keyLabel="3" /></Row><Row><Keyandroid:codes="52"android:keyEdgeFlags="left"android:keyLabel="4" /><Keyandroid:codes="53"android:keyLabel="5" /><Keyandroid:codes="54"android:keyEdgeFlags="right"android:keyLabel="6" /></Row><Row><Keyandroid:codes="55"android:keyEdgeFlags="left"android:keyLabel="7" /><Keyandroid:codes="56"android:keyLabel="8" /><Keyandroid:codes="57"android:keyEdgeFlags="right"android:keyLabel="9" /></Row><Row android:rowEdgeFlags="bottom"><Keyandroid:codes="-3"android:keyEdgeFlags="left"android:keyLabel="*" /><Keyandroid:codes="48"android:keyLabel="0" /><Keyandroid:codes="-4"android:isRepeatable="true"android:keyEdgeFlags="right"android:keyLabel="完成" /></Row></Keyboard>5、AndroidManifest.xml<serviceandroid:name=".SimpleIME"android:label="@string/simple_ime"android:permission="android.permission.BIND_INPUT_METHOD"><meta-dataandroid:name="android.view.im"android:resource="@xml/method" /><intent-filter><action android:name="android.view.InputMethod" /></intent-filter></service>6、method.xml<?xml version="1.0" encoding="utf-8"?><input-method xmlns:android="/apk/res/android"><subtypeandroid:imeSubtypeLocale="en_US"android:imeSubtypeMode="keyboard"android:label="@string/subtype_en_US" /></input-method>4 Demo截图以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
Android实现键盘弹出界面上移的实现思路,android自定义键盘

Android实现键盘弹出界面上移的实现思路,android自定义键盘Android 实现键盘弹出界面上移的实现思路,android 自定义键盘1.首先说一下思路:基本就是结合layout 中scrollview 视图和androidmanifest.xml 中activity 中的android:windowsoftinputmode 属性配置实现;2.要了解android:windowsoftinputmode 相应的可以配置项:activity 主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,android1.5后的一个新特性。
这个属性能影响两件事情:1.当有焦点产生时,软键盘是隐藏还是显示2.是否减少活动主窗口大小以便腾出空间放软键盘windowsoftinputmode 的设置必须是下面列表中的一个值,或一个”state…”值加一个”adjust…”值的组合。
在任一组设置多个值――多个”state…”values ,例如&mdash 有未定义的结果。
各个值之间用|分开。
例如:在这设置的值(除"stateunspecified"和"adjustunspecified"以外)将覆盖在主题中设置的值各值的含义:stateunspecified :软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置stateunchanged :当这个activity 出现时,软键盘将一直保持在上一个activity 里的状态,无论是隐藏还是显示statehidden :用户选择activity 时,软键盘总是被隐藏statealwayshidden :当该activity 主窗口获取焦点时,软键盘也总是被隐藏的statevisible :软键盘通常是可见的statealwaysvisible :用户选择activity 时,软键盘总是显示的状态adjustunspecified :默认设置,通常由系统自行决定是隐藏还是显示adjustresize :该activity 总是调整屏幕的大小以便留出软键盘的空间adjustpan :当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分例如:androidmanifest.xml 文件中界面对应的里加入android:windowsoftinputmode="adjustpan" 键盘就会覆盖屏幕android:windowsoftinputmode="statevisible|adjustresize" 屏幕整体上移(结合scrollview 实现)android:windowsoftinputmode="adjustpan|statehidden" 软键盘弹出,界面布局不变,这是解决弹出软键盘,界面整体被压缩的方式(会导致整个界面上移动,显示效果不好)3.具体实现3.1定义scrollview[Java] 查看源文件复制代码01 02 03 04 05 06 <scrollview< p="">android:layout_width="match_parent"android:layout_height="wrap_content"android:fitssystemwindows="true"android:scrollbars="vertical"><linearlayout< p="">07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><textview< p="">android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/set_account_info"android:layout_margintop="@dimen/business_managemen t_title_top"style="@style/large_size_home_main_color_style"android:layout_gravity="center_horizontal"/><relativelayout< p="">android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:layout_margintop="@dimen/add_confirm_top"android:focusable="true"android:focusableintouchmode="true"><textview< p="">android:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/add_accout_bank_title"style="@style/cheque_collection_hint"android:layout_alignbaseline="@+id/accout_bank"android:text="@string/accout_bank"/><edittext< p="">android:layout_width="@dimen/add_account_code_w"android:layout_margintop="@dimen/common_gap"android:layout_torightof="@+id/add_accout_bank_title"style="@style/cheque_collection_et"android:id="@+id/accout_bank"/></edittext<></textview<></relativelayout<> </textview<></linearlayout<> </scrollview<>。
如何进行Android应用的自定义键盘和输入法开发(七)

如何进行Android应用的自定义键盘和输入法开发Android手机已经成为我们日常生活中必不可少的工具之一。
而自定义键盘和输入法的开发,则可以为用户提供更加个性化和高效的输入体验。
本文将探讨如何进行Android应用的自定义键盘和输入法开发,并提供一些实用技巧和建议。
I. 键盘布局的设计与实现一个用户友好的自定义键盘首先需要一个符合人体工程学的布局设计。
考虑到用户习惯和手指的触摸范围,建议将常用的字母和符号放置在键盘中央位置,以便用户更方便地输入文字。
同时,为了提高输入速度,可以将常用的词汇和短语进行预测,通过智能提示的方式提供给用户。
在Android中,可以使用自定义View来实现键盘布局。
首先,在XML布局文件中定义一个继承自View的类。
然后,通过重写onDraw方法,绘制键盘的背景和按键。
同时,监听用户的触摸事件,实现按键的点击效果和事件处理。
II. 输入法的实现与优化自定义输入法可以为用户提供更加便捷的输入方式,充分发挥Android手机的触摸屏优势。
要实现一个高效的自定义输入法,需要考虑以下几个方面:1. 多语言支持:Android手机用户来自不同的国家和地区,因此自定义输入法应该支持多种语言。
通过区分不同的输入法,可以根据用户的语言习惯提供特定的输入方式和输入内容。
2. 字典和联想:为了提高输入速度,自定义输入法应该具备良好的字典和联想功能。
通过记录用户的输入历史和对应的词汇频率,可以实现更加准确的词汇预测和智能联想。
3. 快捷功能:除了文字输入外,自定义输入法还可以提供一些快捷功能,如表情符号、剪贴板管理等。
这些功能可以加强用户与输入法之间的互动,提高用户体验。
4. 输入法切换:为了方便用户切换不同的输入法,可以提供一个简洁的切换界面,并支持快捷切换的手势操作。
通过设置选项,用户可以自定义默认的输入法和切换方式。
III. 用户反馈与改进用户的反馈和意见对于自定义键盘和输入法的改进至关重要。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android,Android 仿微信自定义数字键盘的实现代码本文介绍了Android 仿微信自定义数字键盘的实现代码,分享给大家,希望对大家有帮助最终效果:实现这个自定义键盘的思路很简单:1. 要写出一个数字键盘的布局;2. 与 Edittext 结合使用,对每个按键的点击事件进行处理;3. 禁用系统软键盘。
有了思路,实现起来就不难了。
1. 实现键盘的 xml 布局网格样式的布局用 GridView 或者 RecyclerView 都可以实现,其实用 GridView 更方便一些,不过我为了多熟悉 RecyclerView 的用法,这里选择用了 RecyclerView 。
[Java] 查看源文件 复制代码?1 <RecyclerView 用来实现键盘布局,上面的 RelativeLayout 则是为了实现收起键盘的点击事件。
2. 在代码中实现键盘布局,填充数据、增加点击事件我们新建类 KeyboardView 继承自 RelativeLayout ,关联上面的布局文件,然后做一些初始化操作:对 RecyclerView 填充数据、设置适配器,设置出现和消失的动画效果,写一些会用到的方法等。
[Java] 查看源文件 复制代码?001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 public class KeyboardView extends RelativeLayout {private RelativeLayout rlBack;private RecyclerView recyclerView;private List<String> datas;private KeyboardAdapter adapter;private Animation animationIn;private Animation animationOut;public KeyboardView(Context context) {this(context, null);}public KeyboardView(Context context, AttributeSet attrs) {this(context, attrs, 0);}public KeyboardView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(context, attrs, defStyleAttr);}024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 private void init(Context context, AttributeSet attrs, int defStyleAttr) { LayoutInflater.from(context).inflate(yout_key_board, this);rlBack = findViewById(R.id.rl_back);rlBack.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View view) { // 点击关闭键盘dismiss();}});recyclerView = findViewById(R.id.recycler_view);initData();initView();initAnimation();}// 填充数据private void initData() {datas = new ArrayList<>();for (int i = 0; i < 12; i++) {if (i < 9) {datas.add(String.valueOf(i + 1));} else if (i == 9) {datas.add(".");} else if (i == 10) {datas.add("0");} else {datas.add("");}}}// 设置适配器private void initView() {recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 3));adapter = new KeyboardAdapter(getContext(), datas);recyclerView.setAdapter(adapter);}// 初始化动画效果private void initAnimation() {animationIn = AnimationUtils.loadAnimation(getContext(), R.anim.keyboard_in);animationOut = AnimationUtils.loadAnimation(getContext(), R.anim.keyboard_out); }// 弹出软键盘public void show() {startAnimation(animationIn);setVisibility(VISIBLE);}// 关闭软键盘public void dismiss() {if (isVisible()) {startAnimation(animationOut);setVisibility(GONE);}}// 判断软键盘的状态public boolean isVisible() {if (getVisibility() == VISIBLE) {return true;}return false;}091 092 093 094 095 096 097 098 099 100 101 102public void setOnKeyBoardClickListener(KeyboardAdapter.OnKeyboardClickListener listener) {adapter.setOnKeyboardClickListener(listener);}public List<String> getDatas() {return datas;}public RelativeLayout getRlBack() {return rlBack;}} Adapter 里面都是很简单的代码,这里就不贴出了,文章末尾我会给出源码下载地址。
到这里为止,自定义数字键盘基本就算写好了,不过最重要的还是要和 Edittext 结合使用。
3. 与 Edittext 结合使用1. 禁用系统软键盘[Java] 查看源文件 复制代码?01 02 03 04 05 06 07 08 09 10 11 12 13 if (Build.VERSION.SDK_INT <= 10) { etInput.setInputType(InputType.TYPE_NULL); } else { getWindow().setSoftInputMode(youtParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); try { Class<EditText> cls = EditText.class; Method setShowSoftInputOnFocus = cls.getMethod("setShowSoftInputOnFocus", boolean.class); setShowSoftInputOnFocus.setAccessible(true); setShowSoftInputOnFocus.invoke(etInput, false); } catch (Exception e) { e.printStackTrace(); } }在网上找了一些方法,但是点击 Edittext 的时候系统软键盘依然会弹出。
最后找到了这个方法,利用反射强制不弹出软键盘,效果不错。
2. 处理各个按键的点击事件[Java] 查看源文件 复制代码?01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 @Overridepublic void onKeyClick(View view, RecyclerView.ViewHolder holder, int position) {switch (position) {case 9: // 按下小数点String num = etInput.getText().toString().trim();if (!num.contains(datas.get(position))) {num += datas.get(position);etInput.setText(num);etInput.setSelection(etInput.getText().length());}break;default: // 按下数字键if ("0".equals(etInput.getText().toString().trim())) { // 第一个数字按下0的话,第二个数字只能按小数点break;}etInput.setText(etInput.getText().toString().trim() + datas.get(position)); etInput.setSelection(etInput.getText().length());break;}}23 24 25 26 27 28 29 30 @Overridepublic void onDeleteClick(View view, RecyclerView.ViewHolder holder, int position) { // 点击删除按钮String num = etInput.getText().toString().trim();if (num.length() > 0) {etInput.setText(num.substring(0, num.length() - 1));etInput.setSelection(etInput.getText().length());}}逻辑也非常简单,看代码就明白了。