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

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

自定义的键盘布局和颜色等形式,识别点击识别,正确将内容绑定在

编写自定义布局文件

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 ;
            }
        });

20200401134307494.png

线没咋对齐,懒得调了。




目录
相关文章
|
2天前
|
XML Android开发 数据格式
Android下自定义Button样式
Android下自定义Button样式
10 3
|
2天前
|
XML Java Android开发
如何美化android程序:自定义ListView背景
如何美化android程序:自定义ListView背景
|
2天前
|
搜索推荐 Android开发
自定义Android标题栏TitleBar布局
自定义Android标题栏TitleBar布局
|
4天前
|
Android开发
Android APP 隐藏系统软键盘的方法
Android APP 隐藏系统软键盘的方法
11 0
|
12天前
|
缓存 算法 Android开发
构建高效安卓应用:深入理解Android Profiler
【4月更文挑战第30天】 在移动开发领域,应用性能优化是提升用户体验的关键因素之一。针对安卓开发者,Android Studio提供的Android Profiler是一个强大的工具,它集成了多个性能分析仪器,帮助开发者监控、分析并优化应用性能。本文将深入探讨Android Profiler的核心功能,并通过案例演示如何利用该工具定位性能瓶颈,以及采取相应的优化措施,从而构建更加高效的安卓应用。
|
19天前
|
Android开发 芯片
Android源代码定制:移除无用lunch|新建lunch|自定义customize.mk
Android源代码定制:移除无用lunch|新建lunch|自定义customize.mk
26 3
|
19天前
|
移动开发 Java Unix
Android系统 自动加载自定义JAR文件
Android系统 自动加载自定义JAR文件
40 1
|
19天前
|
Shell Android开发 开发者
Android系统 自定义动态修改init.custom.rc
Android系统 自定义动态修改init.custom.rc
34 0
|
人工智能 Shell 开发工具
Android性能优化干货分享;你的 APP 为何启动那么慢?
App启动方式 冷启动(Cold start) 冷启动是指APP在手机启动后第一次运行,或者APP进程被kill掉后在再次启动。
1896 0
|
Android开发 数据格式 XML
Android AnimationDrawable动画与APP启动引导页面
Android AnimationDrawable动画与APP启动、加载引导页面(画面) AnimationDrawable是Android的Frame动画,可以简单的认为此AnimationDrawable能够将一系列资源图片加载成“电影”一样播放。
859 0