完成自定义软键盘的绘制和逻辑编写
在res文件夹中创建一个文件包命名为xml。在里面创建一个名为key的xml文件,在其中完成自定义软键盘的绘制
代码如下:
<?xml version="1.0" encoding="utf-8"?>
<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>
在软件文件夹中创建一个名为utils的文件夹,在其中创建一个java类文件命名为keyboardutil文件完成软键盘的逻辑编写
代码如下:
package com.example.myapplication1.utils;标签:editText,void,keyboardView,笔记,public,记账,Override,android,安卓 From: https://www.cnblogs.com/czfznb/p/18027965
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.myapplication1.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);
}
}
}