android:keyHeight=“50dp”
android:keyWidth=“25%p” //一行四个按键
android:horizontalGap=“1px” //键盘与键盘间水平方向分割
android:verticalGap=“1px”> //键盘与键盘间垂直方向分割
//数字键1
android:codes=“50” android:keyLabel=“2”/> //数字键2
//数字键3
//删除键
//数字键4
//数字键5
//数字键6
//确定键,设置较大
//数字键7
//数字键8
//数字键9
//清零键
//0键
//.键
然后是逻辑编写:
KeyboardUtils.java
package com.example.mytally.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.example.mytally.R;
public class KeyBoardUtils {
private final Keyboard k1; //自定义键盘
private KeyboardView keyboardView;
private EditText 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);
}
lectionStart();
switch (primaryCode) {
case Keyboard.KEYCODE_DELETE: //点击了删除键
if (editable!=null &&editable.length()>0) {
if (start>0) {
editable.delete(start-1,start);
}