android平常在输入密码或者金额的时候需要自定义输入的数字键盘
android 数字键盘_第1张图片
引用:我是在这个软键盘的基础上进行修改的
https://github.com/xuejinwei/NumberKeyboard

1.

package com.dejun.commonsdk.wight.numkeyboard;import android.app.Activity;import android.content.Context;import android.inputmethodservice.Keyboard;import android.inputmethodservice.KeyboardView;import android.os.Build;import android.text.Editable;import android.text.InputType;import android.view.View;import android.view.inputmethod.InputMethodManager;import android.widget.EditText;import com.dejun.commonsdk.R;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import java.util.Random;/** * Author:DoctorWei * Time:2018/12/27 9:13 * Description:自定义软件盘 工具类 * email:[email protected] */public class KeyboardUtil {    private Activity mActivity;    private boolean  mIfRandom;    private MyKeyBoardView mKeyboardView;    private Keyboard       mKeyboardNumber;//数字键盘    private EditText       mEditText;    public KeyboardUtil(Activity activity) {        this(activity, false);    }    public KeyboardUtil(Activity activity, boolean ifRandom) {        this.mActivity = activity;        this.mIfRandom = ifRandom;        mKeyboardNumber = new Keyboard(mActivity, R.xml.keyboard_number);        mKeyboardView = (MyKeyBoardView) mActivity.findViewById(R.id.keyboard_view);    }    /**     * edittext绑定自定义键盘     *     * @param editText 需要绑定自定义键盘的edittext     */    public void attachTo(EditText editText) {        this.mEditText = editText;        hideSystemSofeKeyboard(mActivity.getApplicationContext(), mEditText);        showSoftKeyboard();    }    public void showSoftKeyboard() {        if (mKeyboardNumber == null) {            mKeyboardNumber = new Keyboard(mActivity, R.xml.keyboard_number);        }        if (mKeyboardView == null) {            mKeyboardView = (MyKeyBoardView) mActivity.findViewById(R.id.keyboard_view);        }        if (mIfRandom) {            randomKeyboardNumber();        } else {            mKeyboardView.setKeyboard(mKeyboardNumber);        }        mKeyboardView.setEnabled(true);        mKeyboardView.setPreviewEnabled(false);        mKeyboardView.setVisibility(View.VISIBLE);        mKeyboardView.setOnKeyboardActionListener(mOnKeyboardActionListener);    }    private KeyboardView.OnKeyboardActionListener mOnKeyboardActionListener = 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 = mEditText.getText();            int start = mEditText.getSelectionStart();            if (primaryCode == Keyboard.KEYCODE_DELETE) {// 回退                if (editable != null && editable.length() > 0) {                    if (start > 0) {                        editable.delete(start - 1, start);                    }                }            } else if (primaryCode == Keyboard.KEYCODE_CANCEL) {// 隐藏键盘                hideKeyboard();                if (mOnCancelClick != null) {                    mOnCancelClick.onCancellClick();                }            } else if (primaryCode == Keyboard.KEYCODE_DONE) {// 隐藏键盘                hideKeyboard();                if (mOnOkClick != null) {                    mOnOkClick.onOkClick();                }            } else {                editable.insert(start, Character.toString((char) primaryCode));            }        }        @Override        public void onText(CharSequence text) {        }        @Override        public void swipeLeft() {        }        @Override        public void swipeRight() {        }        @Override        public void swipeDown() {        }        @Override        public void swipeUp() {        }    };    /**     * 隐藏系统键盘     *     * @param editText     */    public static void hideSystemSofeKeyboard(Context context, EditText editText) {        int sdkInt = Build.VERSION.SDK_INT;        if (sdkInt >= 11) {            try {                Class cls = EditText.class;                Method setShowSoftInputOnFocus;                setShowSoftInputOnFocus = cls.getMethod("setShowSoftInputOnFocus", boolean.class);                setShowSoftInputOnFocus.setAccessible(true);                setShowSoftInputOnFocus.invoke(editText, false);            } catch (SecurityException e) {                e.printStackTrace();            } catch (NoSuchMethodException e) {                e.printStackTrace();            } catch (Exception e) {                e.printStackTrace();            }        } else {            editText.setInputType(InputType.TYPE_NULL);        }        // 如果软键盘已经显示,则隐藏        InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);        imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);    }    public interface OnOkClick {        void onOkClick();    }    public interface onCancelClick {        void onCancellClick();    }    public OnOkClick mOnOkClick = null;    public onCancelClick mOnCancelClick;    public void setOnOkClick(OnOkClick onOkClick) {        mOnOkClick = onOkClick;    }    public void setOnCancelClick(onCancelClick onCancelClick) {        mOnCancelClick = onCancelClick;    }    private boolean isNumber(String str) {        String wordstr = "0123456789";        return wordstr.contains(str);    }    private void randomKeyboardNumber() {        List keyList = mKeyboardNumber.getKeys();        // 查找出0-9的数字键        List newkeyList = new ArrayList();        for (int i = 0; i < keyList.size(); i++) {            if (keyList.get(i).label != null                    && isNumber(keyList.get(i).label.toString())) {                newkeyList.add(keyList.get(i));            }        }        // 数组长度        int count = newkeyList.size();        // 结果集        List resultList = new ArrayList();        // 用一个LinkedList作为中介        LinkedList temp = new LinkedList();        // 初始化temp        for (int i = 0; i < count; i++) {            temp.add(new KeyModel(48 + i, i + ""));        }        // 取数        Random rand = new Random();        for (int i = 0; i < count; i++) {            int num = rand.nextInt(count - i);            resultList.add(new KeyModel(temp.get(num).getCode(),                    temp.get(num).getLable()));            temp.remove(num);        }        for (int i = 0; i < newkeyList.size(); i++) {            newkeyList.get(i).label = resultList.get(i).getLable();            newkeyList.get(i).codes[0] = resultList.get(i)                    .getCode();        }        mKeyboardView.setKeyboard(mKeyboardNumber);    }    public void showKeyboard() {        int visibility = mKeyboardView.getVisibility();        if (visibility == View.GONE || visibility == View.INVISIBLE) {            mKeyboardView.setVisibility(View.VISIBLE);        }    }    public void hideKeyboard() {        int visibility = mKeyboardView.getVisibility();        if (visibility == View.VISIBLE) {            mKeyboardView.setVisibility(View.GONE);        }    }}3.使用
et = (EditText) findViewById(R.id.et);final KeyboardUtil keyboardUtil = new KeyboardUtil(this,false);//false不随机et.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {        keyboardUtil.attachTo(et);    }});

更多相关文章

  1. Android禁用键盘的所有按键
  2. 【android】禁止Edittext弹出软键盘并且使光标正常显示
  3. 输入键盘始终停留以及尺寸转换得到默认字体大小
  4. Android全屏模式,监听软键盘弹出事件。
  5. Android应用程序键盘(Keyboard)消息处理机制分析(2)
  6. Android的EditText控件点击虚拟键盘上的回车怎么跳到下一个EditT
  7. Android进入页面开始就自动弹出软键盘
  8. android点击屏幕隐藏小键盘
  9. Android 总结:自定义键盘实现原理和三种实例详解

随机推荐

  1. Android逆向实例笔记—那些搜不到的中文
  2. Android学习笔记(一):基本概念
  3. Android基础 - 对话框和浮动Activity
  4. 安装使用Android-x86打造快速流畅的Aandr
  5. 赵雅智_setImageResource和setImageBitma
  6. 疯狂android讲义(第三版)总结之 2.11 使用
  7. Android界面的.9.png图片显示出错,怎么回
  8. Android DrawerLayout 高仿QQ5.2双向侧滑
  9. Android基于特征码查杀手机病毒
  10. 获取机器人屏幕的尺寸