【安卓开发】Android中自定义软键盘的使用

自定义的键盘布局和颜色等形式,识别点击识别,正确将内容绑定在 E d i t T e x t EditText EditText上。

编写自定义布局文件

jianpan.xml

属性解释:
keyHeight 软键盘一个键的高度
keyWidth=“25%p” 软键盘一个键的占比
horizontalGap 横向间隔
verticalGap 纵向间隔
codes里值得ASCII值

<?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="55" android:keyLabel="7"></Key>
        <Key android:codes="56" android:keyLabel="8"></Key>
        <Key android:codes="57" android:keyLabel="9"></Key>
        <Key android:codes="-1" android:keyLabel="删除"></Key>
    </Row>
    <Row>
        <Key android:codes="52" android:keyLabel="4"></Key>
        <Key android:codes="53" android:keyLabel="5"></Key>
        <Key android:codes="54" android:keyLabel="6"></Key>
        <Key android:codes="-2" android:keyLabel="确定" android:keyHeight="150dp" ></Key>
    </Row>
    <Row>
        <Key android:codes="49" android:keyLabel="1"></Key>
        <Key android:codes="50" android:keyLabel="2"></Key>
        <Key android:codes="51" android:keyLabel="3"></Key>
    </Row>
    <Row>
        <Key android:codes="-3" android:keyLabel="清零"></Key>
        <Key android:codes="48" android:keyLabel="0"></Key>
        <Key android:codes="46" android:keyLabel="."></Key>
    </Row>
</Keyboard>

设置键盘的点击事件

独立的JAVA类

public class Jianpan {
    private KeyboardView keyboardView;
    private EditText editText;
    private Keyboard mykey;//自定义键盘
    public interface OnEnsureListener{
        public void onEnsure();
    }
    OnEnsureListener onEnsureListener;

    public void setOnEnsureListener(OnEnsureListener onEnsureListener) {
        this.onEnsureListener = onEnsureListener;
    }
    public Jianpan(KeyboardView keyboardView, EditText editText) {
        this.keyboardView = keyboardView;
        this.editText = editText;
        this.editText.setInputType(InputType.TYPE_NULL);//不弹出系统键盘
        mykey = new Keyboard(this.editText.getContext(), R.xml.jianpan);

        this.keyboardView.setKeyboard(mykey);//设置要显示键盘的样式
        this.keyboardView.setEnabled(true);
        this.keyboardView.setPreviewEnabled(false);
        this.keyboardView.setOnKeyboardActionListener(listener);
    }
    KeyboardView.OnKeyboardActionListener listener=new KeyboardView.OnKeyboardActionListener() {
        @Override
        public void onPress(int i) {

        }

        @Override
        public void onRelease(int i) {

        }

        @Override
        public void onKey(int i, int[] ints) {
            Editable editable=editText.getText();
            int start=editText.getSelectionStart();
            if(i==-1){//删除
                if(editable!=null&&editable.length()>0){
                    if(start>0){
                        editable.delete(start-1,start);
                    }
                }
            }
            else if(i==-2){//确定
                onEnsureListener.onEnsure();//接口回调
                System.out.println(editText.getText().toString());
            }
            else if(i==-3){//清零
                editable.clear();
            }
            else{
                editable.insert(start,Character.toString((char)i));
            }
        }

        @Override
        public void onText(CharSequence charSequence) {

        }

        @Override
        public void swipeLeft() {

        }

        @Override
        public void swipeRight() {

        }

        @Override
        public void swipeDown() {

        }

        @Override
        public void swipeUp() {

        }
    };
    public void show(){
        //显示键盘
        int now=keyboardView.getVisibility();
        if(now==View.INVISIBLE||now==View.GONE){
            keyboardView.setVisibility(View.VISIBLE);
        }
    }
    public void hide(){
        //隐藏键盘
        int now=keyboardView.getVisibility();
        if(now==View.VISIBLE||now==View.INVISIBLE){
            keyboardView.setVisibility(View.GONE);
        }
    }
}

主页面的JAVA代码调用自定义软键盘

Jianpan jp=new Jianpan(my,et);
        jp.show();
        jp.setOnEnsureListener(new Jianpan.OnEnsureListener() {
            @Override
            public void onEnsure() {
                String nowmoney=et.getText().toString();
                if(TextUtils.isEmpty(nowmoney)||nowmoney.equals("0")) {
                    getActivity().finish();
                    return;
                }
                getActivity().finish();
                return ;
            }
        });

在这里插入图片描述
线没咋对齐,懒得调了。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆沙睡不醒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值