抱歉今天稍微晚了一点,主要是我自己眼瞎看错了一个东西导致原地踏步好长时间。
今天先完成了下面创建xml和里面的key.xml
key.xml
<?xml version="1.0" encoding="utf-8"?> <!--keyHeight 每一个按键高度 keyWidth 每一个按键宽度25%--> <Keyboard xmlns:android="http://schemas.android.com/apk/res/android" android:keyHeight="50dp" android:keyWidth="25%p" android:horizontalGap="1px" android:verticalGap="1px"> <Row> <Key android:codes="49" android:keyLabel="1"/> <Key android:codes="50" android:keyLabel="2"/> <Key android:codes="51" android:keyLabel="3"/> <Key android:codes="-5" android:keyLabel="删除"/> </Row> <Row> <Key android:codes="52" android:keyLabel="4"/> <Key android:codes="53" android:keyLabel="5"/> <Key android:codes="54" android:keyLabel="6"/> <Key android:codes="-4" android:keyHeight="150dp" android:keyLabel="确定"/> </Row> <Row> <Key android:codes="55" android:keyLabel="7"/> <Key android:codes="56" android:keyLabel="8"/> <Key android:codes="57" android:keyLabel="9"/> </Row> <Row> <Key android:codes="-3" android:keyLabel="清零"/> <Key android:codes="48" android:keyLabel="0"/> <Key android:codes="46" android:keyLabel="."/> </Row> </Keyboard>
主要就是进行键盘的一个编写
然后就是
Java下的工具类和工具包
KeyBoardUtils
package com.hui.asd.utils; import android.inputmethodservice.Keyboard; import android.inputmethodservice.KeyboardView; import android.text.Editable; import android.text.InputType; import android.view.View; import android.widget.EditText; import com.hui.asd.R; public class KeyBoardUtils { private final Keyboard k1; //自定义键盘 private KeyboardView keyboardView; private EditText editText; public interface OnEnsureListener{ public void onEnsure(); } OnEnsureListener onEnsureListener; public void setOnEnsureListener(OnEnsureListener onEnsureListener) { this.onEnsureListener = onEnsureListener; } public KeyBoardUtils(KeyboardView keyboardView, EditText editText) { this.keyboardView = keyboardView; this.editText = editText; this.editText.setInputType(InputType.TYPE_NULL); //取消弹出系统键盘 k1 = new Keyboard(this.editText.getContext(), R.xml.key); this.keyboardView.setKeyboard(k1); //设置要显示键盘的样式 this.keyboardView.setEnabled(true); //可使用 this.keyboardView.setPreviewEnabled(false); //预览 this.keyboardView.setOnKeyboardActionListener(listener); //设置键盘按钮被点击了的监听 } KeyboardView.OnKeyboardActionListener listener = new KeyboardView.OnKeyboardActionListener() { @Override public void onPress(int primaryCode) { } @Override public void onRelease(int primaryCode) { } @Override public void onKey(int primaryCode, int[] keyCodes) { Editable editable = editText.getText(); int start = editText.getSelectionStart(); switch (primaryCode){ case Keyboard.KEYCODE_DELETE: //点击了删除键 if(editable!=null &&editable.length()>0){ if (start>0) { editable.delete(start-1,start); } } break; case Keyboard.KEYCODE_CANCEL: //点击了清零 editable.clear(); break; case Keyboard.KEYCODE_DONE: //点击了完成 onEnsureListener.onEnsure(); //通过接口回调的方法,当点击确定时,可以调用这个方法 break; default: //其他的数字直接插入 editable.insert(start,Character.toString((char)primaryCode)); break; } } @Override public void onText(CharSequence text) { } @Override public void swipeLeft() { } @Override public void swipeRight() { } @Override public void swipeDown() { } @Override public void swipeUp() { } }; // 显示键盘 public void showKeyboard(){ int visibility = keyboardView.getVisibility(); if (visibility == View.INVISIBLE||visibility == View.GONE) { keyboardView.setVisibility(View.VISIBLE); } } // 隐藏键盘 public void hideKeyboard(){ int visibility = keyboardView.getVisibility(); if (visibility == View.VISIBLE||visibility == View.INVISIBLE) { keyboardView.setVisibility(View.GONE); } } }
就是设置了一个新的键盘,然后键盘样式,预览,主要就是监听,下面是关于删除清零完成的监听