zoukankan      html  css  js  c++  java
  • android仿支付宝输入车牌号

    这个是iOS的效果图,差异不大,楼主主攻OC,见谅

    需要用到的xml文件

    需要用到的类

    number_or_letters.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <Keyboard android:keyWidth="10%p" android:keyHeight="8%"
              android:horizontalGap="0.0px" android:verticalGap="0.0px"
              xmlns:android="http://schemas.android.com/apk/res/android">
        <Row android:verticalGap="1%p">
            <Key android:codes="49" android:keyLabel="1"
                 android:horizontalGap="1%p" android:keyWidth="8%p"
                 android:keyEdgeFlags="left"  />
            <Key android:codes="50" android:keyLabel="2"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="51" android:keyLabel="3"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="52" android:keyLabel="4"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="53" android:keyLabel="5"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="54" android:keyLabel="6"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="55" android:keyLabel="7"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="56" android:keyLabel="8"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="57" android:keyLabel="9"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="48" android:keyLabel="0"
                 android:horizontalGap="2%p" android:keyWidth="8%p"
                 android:keyEdgeFlags="right"/>
        </Row>
     
        <Row android:verticalGap="1%p">
            <Key android:codes="81" android:keyLabel="Q"
                 android:horizontalGap="1%p" android:keyWidth="8%p"
                 android:keyEdgeFlags="left" />
            <Key android:codes="87" android:keyLabel="W"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="69" android:keyLabel="E"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="82" android:keyLabel="R"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="84" android:keyLabel="T"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="89" android:keyLabel="Y"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="85" android:keyLabel="U"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="73" android:keyLabel="I"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="79" android:keyLabel="O"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="80" android:keyLabel="P"
                 android:horizontalGap="2%p" android:keyWidth="8%p"
                 android:keyEdgeFlags="right" />
        </Row>
     
        <Row android:verticalGap="1%p">
            <Key android:codes="65" android:keyLabel="A"
                 android:horizontalGap="6%p" android:keyWidth="8%p"
                 android:keyEdgeFlags="left"/>
            <Key android:codes="83" android:keyLabel="S"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="68" android:keyLabel="D"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="70"  android:keyLabel="F"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="71" android:keyLabel="G"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="72"  android:keyLabel="H"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="74" android:keyLabel="J"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="75" android:keyLabel="K"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="76"  android:keyLabel="L"
                 android:horizontalGap="2%p" android:keyWidth="8%p"
                 android:keyEdgeFlags="right" />
        </Row>
     
        <Row >
            <Key android:codes="-1"
                 android:keyEdgeFlags="left" android:keyLabel="省份"
                 android:horizontalGap="1%p" android:keyWidth="13%p"
                 android:isModifier="true" android:isSticky="true"  />
            <Key android:codes="90" android:keyLabel="Z"
                 android:horizontalGap="2%p" android:keyWidth="8%p"/>
            <Key android:codes="88" android:keyLabel="X"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="67" android:keyLabel="C"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="86" android:keyLabel="V"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="66" android:keyLabel="B"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="78" android:keyLabel="N"
                 android:horizontalGap="2%p" android:keyWidth="8%p"/>
            <Key android:codes="77" android:keyLabel="M"
                 android:horizontalGap="2%p" android:keyWidth="8%p"/>
            <Key  android:codes="-3"
                  android:keyEdgeFlags="right" android:keyLabel="删除"
                  android:horizontalGap="2%p" android:keyWidth="13%p"
                  android:isRepeatable="false" />
        </Row>
     
    </Keyboard>
    
     

     province_abbreviation.xml

     
    <?xml version="1.0" encoding="UTF-8"?>
    <Keyboard
        android:keyWidth="10%p" android:keyHeight="8%p"
        android:horizontalGap="0.0px" android:verticalGap="0.0px"
        xmlns:android="http://schemas.android.com/apk/res/android">
    
        <Row android:verticalGap="1%p">
            <Key android:codes="20140" android:keyLabel="京"
                 android:horizontalGap="1%p" android:keyWidth="8%p"
                 android:keyEdgeFlags="left"  />
            <Key android:codes="27941" android:keyLabel="津"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="20864" android:keyLabel="冀"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="40065" android:keyLabel="鲁"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="26187" android:keyLabel="晋"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="33945" android:keyLabel="蒙"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="36797" android:keyLabel="辽"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="21513" android:keyLabel="吉"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="40657" android:keyLabel="黑"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="27818" android:keyLabel="沪"
                 android:horizontalGap="2%p" android:keyWidth="8%p"
                 android:keyEdgeFlags="right"/>
        </Row>
    
        <Row android:verticalGap="1%p">
            <Key android:codes="33487" android:keyLabel="苏"
                 android:horizontalGap="1%p" android:keyWidth="8%p"
                 android:keyEdgeFlags="left" />
            <Key android:codes="27993" android:keyLabel="浙"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="30358" android:keyLabel="皖"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="38397" android:keyLabel="闽"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="36195" android:keyLabel="赣"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="35947" android:keyLabel="豫"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="37122" android:keyLabel="鄂"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="28248" android:keyLabel="湘"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="31908" android:keyLabel="粤"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="26690" android:keyLabel="桂"
                 android:horizontalGap="2%p" android:keyWidth="8%p"
                 android:keyEdgeFlags="right" />
        </Row>
    
        <Row android:verticalGap="1%p">
            <Key android:codes="28189" android:keyLabel="渝"
                 android:horizontalGap="11%p" android:keyWidth="8%p"
                 android:keyEdgeFlags="left"/>
            <Key android:codes="24029" android:keyLabel="川"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="36149" android:keyLabel="贵"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="20113"  android:keyLabel="云"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="34255" android:keyLabel="藏"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="38485"  android:keyLabel="陕"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="29976" android:keyLabel="甘"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="38738"  android:keyLabel="青"
                 android:horizontalGap="2%p" android:keyWidth="8%p"
                 android:keyEdgeFlags="right" />
        </Row>
    
        <Row >
            <Key android:codes="-1"
                 android:keyEdgeFlags="left" android:keyLabel="ABC"
                 android:horizontalGap="4%p" android:keyWidth="15%p"
                 android:isModifier="true" android:isSticky="true"  />
            <Key android:codes="29756" android:keyLabel="琼"
                 android:horizontalGap="2%p" android:keyWidth="8%p"/>
            <Key android:codes="26032" android:keyLabel="新"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="23425" android:keyLabel="宁"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="28207" android:keyLabel="港"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="28595" android:keyLabel="澳"
                 android:horizontalGap="2%p" android:keyWidth="8%p" />
            <Key android:codes="21488" android:keyLabel="台"
                 android:horizontalGap="2%p" android:keyWidth="8%p"/>
            <Key  android:codes="-3"
                  android:keyEdgeFlags="right" android:keyLabel="删除"
                  android:horizontalGap="2%p" android:keyWidth="15%p"
                  android:isRepeatable="false" />
        </Row>
    
    </Keyboard>
    
    KeyboardUtil.java
    public class KeyboardUtil {
        private Activity mActivity;
        private KeyboardView mKeyboardView;
        private EditText mEdit;
        /**
         * 省份简称键盘
         */
        private Keyboard provinceKeyboard;
        /**
         * 数字与大写字母键盘
         */
        private Keyboard numberKeyboard;
    
        public KeyboardUtil(Activity activity, EditText edit) {
            mActivity = activity;
            mEdit = edit;
            provinceKeyboard = new Keyboard(activity, R.xml.province_abbreviation);
            numberKeyboard = new Keyboard(activity, R.xml.number_or_letters);
            mKeyboardView = (KeyboardView) activity.findViewById(R.id.keyboard_view);
            mKeyboardView.setKeyboard(provinceKeyboard);
            mKeyboardView.setEnabled(true);
            mKeyboardView.setPreviewEnabled(false);
            mKeyboardView.setOnKeyboardActionListener(listener);
        }
    
        private KeyboardView.OnKeyboardActionListener listener = new KeyboardView.OnKeyboardActionListener() {
            @Override
            public void swipeUp() {
            }
    
            @Override
            public void swipeRight() {
            }
    
            @Override
            public void swipeLeft() {
            }
    
            @Override
            public void swipeDown() {
            }
    
            @Override
            public void onText(CharSequence text) {
    
            }
    
            @Override
            public void onRelease(int primaryCode) {
            }
    
            @Override
            public void onPress(int primaryCode) {
            }
    
            @Override
            public void onKey(int primaryCode, int[] keyCodes) {
                Editable editable = mEdit.getText();
                int start = mEdit.getSelectionStart();
                //判定是否是中文的正则表达式 [\u4e00-\u9fa5]判断一个中文 [\u4e00-\u9fa5]+多个中文
                String reg = "[\u4e00-\u9fa5]";
                if (primaryCode == -1) {// 省份简称与数字键盘切换
                    if (mEdit.getText().toString().matches(reg)) {
                        changeKeyboard(true);
                    }
                } else if (primaryCode == -3) {
                    if (editable != null && editable.length() > 0) {
                        //没有输入内容时软键盘重置为省份简称软键盘
                        if (editable.length() == 1) {
                            changeKeyboard(false);
                        }
                        if (start > 0) {
                            editable.delete(start - 1, start);
                        }
                    }
                } else {
                    editable.insert(start, Character.toString((char) primaryCode));
                    // 判断第一个字符是否是中文,是,则自动切换到数字软键盘
                    if (mEdit.getText().toString().matches(reg)) {
                        changeKeyboard(true);
                    }
                }
            }
        };
    
        /**
         * 指定切换软键盘 isNumber false表示要切换为省份简称软键盘 true表示要切换为数字软键盘
         */
        private void changeKeyboard(boolean isNumber) {
            if (isNumber) {
                mKeyboardView.setKeyboard(numberKeyboard);
            } else {
                mKeyboardView.setKeyboard(provinceKeyboard);
            }
        }
    
        /**
         * 软键盘展示状态
         */
        public boolean isShow() {
            if(mKeyboardView == null){
                return false;
            }
            return mKeyboardView.getVisibility() == View.VISIBLE;
        }
    
        /**
         * 软键盘展示
         */
        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.INVISIBLE);
            }
        }
    
        /**
         * 禁掉系统软键盘
         */
        public void hideSoftInputMethod() {
            mActivity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
            int currentVersion = android.os.Build.VERSION.SDK_INT;
            String methodName = null;
            if (currentVersion >= 16) {
                // 4.2
                methodName = "setShowSoftInputOnFocus";
            } else if (currentVersion >= 14) {
                // 4.0
                methodName = "setSoftInputShownOnFocus";
            }
            if (methodName == null) {
                mEdit.setInputType(InputType.TYPE_NULL);
            } else {
                Class<EditText> cls = EditText.class;
                Method setShowSoftInputOnFocus;
                try {
                    setShowSoftInputOnFocus = cls.getMethod(methodName, boolean.class);
                    setShowSoftInputOnFocus.setAccessible(true);
                    setShowSoftInputOnFocus.invoke(mEdit, false);
                } catch (NoSuchMethodException e) {
                    mEdit.setInputType(InputType.TYPE_NULL);
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (IllegalArgumentException e) {
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                }
            }
        }
    
    }
    

     使用:

        <android.inputmethodservice.KeyboardView
            android:id="@+id/keyboard_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:background="#DCDCDC"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:keyBackground="@drawable/radius5"
            android:keyTextColor="#000"
            android:keyTextSize="18sp"
            android:paddingBottom="8dp"
            android:paddingTop="8dp"
            android:shadowColor="#FFFFFF"
            android:shadowRadius="0.0"
            android:visibility="gone"/>
    
     licese = (EditText) findViewById(R.id.licese);
            licese.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View view, MotionEvent event) {
                    if (keyboardUtil == null) {
                        keyboardUtil = new KeyboardUtil(JumpScanActivity.this, licese);
                        keyboardUtil.hideSoftInputMethod();
                        keyboardUtil.showKeyboard();
                    } else {
                        keyboardUtil.showKeyboard();
                    }
                    return false;
                }
            });
    
  • 相关阅读:
    iisexpress应用讲解
    Flex document文档 下载网址:
    HDU1407 测试你是否和LTC水平一样高
    HDU1715 大菲波数 Java
    HDU1573 大明A+B Java
    HDU1063 Exponentiation Java
    HDU1754 I Hate It 线段树 链式
    HDU2054 A == B? Java
    HDU1166 敌兵布阵 不完全线段树
    HDU1698 Just a Hook 线段树 Lazy思想
  • 原文地址:https://www.cnblogs.com/hualuoshuijia/p/10007681.html
Copyright © 2011-2022 走看看