精华内容
下载资源
问答
  • android自定义键盘按键
    2021-05-28 04:09:16

    最近准备要做一个项目,需要用到自定义小键盘来确保安全,而且还需要精确获得用户点击键盘时的落点位置、力度、指尖接触屏幕的面积等参数。 在写自定义键盘的时

    最近准备要做一个项目,需要用到自定义小键盘来确保安全,而且还需要精确获得用户点击键盘时的落点位置、力度、指尖接触屏幕的面积等参数。

    在写自定义键盘的时候,用到了国内网上的一些代码,出处是

    向先人致敬!

    然后发现down下来的代码用到我的项目时,出现了各种问题:

    1.首先,是一打开应用,就会出现弹出的是系统的输入法键盘,而是不自定义键盘,这个问题是由于

    android:focusable="true"

    android:focusableInTouchMode="true"

    那么在

    et.setOnTouchListener(new View.OnTouchListener(){

    @Override

    public boolean onTouch(View v, MotionEvent event) {

    int inputback = et.getInputType();

    et.setInputType(InputType.TYPE_NULL);

    AdvantageKeyboard kb = new AdvantageKeyboard(act,ctx,et);

    kb.showKeyboard();

    et.setInputType(inputback);

    v.performClick();

    return false;

    }

    });

    2.点击时,键盘弹出的提示框里面没有字体。例如这样

    4e7d0d44ce381f3397d220df1dbfda10.png

    这是由于显示的字体时白色,而背景也是白色导致的。后来各种百度,有人说是因为

    在我们自定义的

     

    android:id="@+id/keyboard_view"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:layout_alignParentBottom="true"

    android:focusable="true"

    android:focusableInTouchMode="true"

    android:background="@color/black"

    android:keyBackground="@drawable/btn_keyboard_key"

    android:keyPreviewLayout="@layout/key_preview_layout"

    android:keyTextColor="@color/white"

    android:visibility="gone" />

    然后在layout

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:textSize="40sp"

    android:textColor="@android:color/white"

    android:gravity="center"

    android:background="#ff8888ff"/>

    其中

    b9de68bea7bae9367d4fd36aad2279b6.png

    3.加入键盘的触摸响应,并记录点击的相关信息(力度,接触面积,,落点坐标等)。

    我们可以在自定义键盘中的构造函数中对keyboardView加入触摸监听器,例如这样写构造方法。

    public AdvantageKeyboard(Activity act, Context ctx, EditText edit) {

    this.act = act;

    this.ctx = ctx;

    this.ed = edit;

    kb_letter = new Keyboard(this.ctx, R.xml.qwerty);

    kb_number = new Keyboard(this.ctx, R.xml.symbols);

    keyboardView = (KeyboardView) this.act.findViewById(R.id.keyboard_view);

    keyboardView.setKeyboard(kb_number);

    is_nun = true;

    keyboardView.setEnabled(true);

    keyboardView.setPreviewEnabled(true);

    keyboardView.setOnKeyboardActionListener(action_listener);

    keyboardView.setOnTouchListener(touch_listener);//加入触摸监听器

    }

    然后

    private OnTouchListener touch_listener = new OnTouchListener(){

    @Override

    public boolean onTouch(View v, android.view.MotionEvent event) {

    float pressure, size, rx, ry, x, y, interval;

    long time, down_time;

    int action = event.getAction();

    switch (action) {

    case (MotionEvent.ACTION_DOWN):

    pressure = event.getPressure();

    size = event.getSize();

    time = event.getEventTime();

    down_time = event.getDownTime();

    x = event.getX();

    y = event.getY();

    rx = event.getRawX();

    ry = event.getRawY();

    interval = (float) 0.0;

    if(is_first_press){

    interval = down_time - last_down_time;

    }

    is_first_press = true;

    last_down_time = down_time;

    Log.i("!!!!!!!!!","pressure:"+String.valueOf(pressure)+"\n"

    +"size:"+String.valueOf(size)+"\n"

    +"time:"+String.valueOf(time)+"\n"

    +"downtime:"+String.valueOf(down_time)+"\n"

    +"x:"+String.valueOf(x)+" y:"+String.valueOf(y)+"\n"

    +"rx:"+String.valueOf(rx)+" ry:"+String.valueOf(ry)+"\n"

    +"interval:"+String.valueOf(interval)+"\n");

    break;

    case (MotionEvent.ACTION_UP):

    v.performClick();

    break;

    case (MotionEvent.ACTION_MOVE):

    break;

    }

    return false;

    }

    };

    然后搞定了...

    源码下载:

    更多相关内容
  • 本篇文章主要介绍了Android自定义键盘的实现(数字键盘和字母键盘),具有一定的参考价值,有兴趣的可以了解一下
  • 此为示例代码,详细讲解请参考博文: http://blog.csdn.net/tangron/article/details/20699331 如对资源内容有疑问,请到博客中留言。 欢迎大家评阅,谢谢
  • Android 自定义键盘

    2019-02-18 17:33:17
    许多应用都使用自定义键盘,我自己也来撸一把,我等了三年,我不是证明我自己有多厉害,只是使用自己定义的键盘方便一些(嘿嘿)。 想想,你平时输入很多东西,要按很多按键,现在一个按键就搞定了。 如果使用中...
  • Android自定义键盘(KeyboardView)

    千次阅读 2022-06-28 11:23:59
    Android自定义键盘(KeyboardView)

    1.场景:

    项目中有定制的设备需要放在室外,用户使用时使用系统自带的键盘肯能没有那么方便,所以就需要使用到了自定义键盘

    (结尾附上完整代码可以直接使用,不想看过程的可以直接跳过)

    2.想法:

    封装成一个比较通用的,当成一个View一样来使用

    
    **实现自定义键盘思路:**
     1. 在res包下创建xml目录,Keyboard标签来定义键盘布局
     2. 创建IKeyboardView类并继承KeyboardView,设置键盘布局(数字和字母)
     3. 处理自定义键盘按键的点击事件以及预览,并实现数字和字母键盘(包括大小写)之间的切换
     4. 绑定EditText,并且屏蔽系统键盘(实现点击切换绑定多个EditText5. 使用
    

    3.开始实现:

    《一》 在res包下创建xml目录,Keyboard标签来定义键盘布局:

    创建keyboard_num.xml文件(数字键盘布局)

    <?xml version="1.0" encoding="utf-8"?>
    <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
        android:keyWidth="10%p"
        android:keyHeight="7%p"
        android:horizontalGap="0.0px"
        android:verticalGap="0.0px">
        <Row android:verticalGap="1%p">
            <Key
                android:codes="113"
                android:keyLabel="q"
                android:horizontalGap="1.81%p">
    
            </Key>
            <Key
                android:codes="119"
                android:keyLabel="w"
                android:horizontalGap="1.81%p">
    
            </Key>
            <Key
                android:codes="101"
                android:keyLabel="e"
                android:horizontalGap="1.81%p">
    
            </Key>
            <Key
                android:codes="114"
                android:keyLabel="r"
                android:horizontalGap="1.81%p">
    
            </Key>
            <Key
                android:codes="116"
                android:keyLabel="t"
                android:horizontalGap="1.81%p">
    
            </Key>
            <Key
                android:codes="121"
                android:keyLabel="y"
                android:horizontalGap="1.81%p">
    
            </Key>
            <Key
                android:codes="117"
                android:keyLabel="y"
                android:horizontalGap="1.81%p">
    
            </Key>
            <Key
                android:codes="105"
                android:keyLabel="i"
                android:horizontalGap="1.81%p">
    
            </Key>
            <Key
                android:codes="111"
                android:keyLabel="o"
                android:horizontalGap="1.81%p">
    
            </Key>
            <Key
                android:codes="112"
                android:keyLabel="p"
                android:horizontalGap="1.81%p">
    
            </Key>
        </Row>
        <Row android:verticalGap="1%p">
            <Key
                android:codes="97"
                android:keyLabel="a"
                android:keyWidth="9%p"
                android:horizontalGap="5.5%p">
    
            </Key>
            <Key
                android:codes="115"
                android:keyLabel="s"
                android:keyWidth="9%p"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="100"
                android:keyLabel="d"
                android:keyWidth="9%p"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="102"
                android:keyLabel="f"
                android:keyWidth="9%p"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="103"
                android:keyLabel="g"
                android:keyWidth="9%p"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="104"
                android:keyLabel="h"
                android:keyWidth="9%p"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="106"
                android:keyLabel="j"
                android:keyWidth="9%p"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="107"
                android:keyLabel="k"
                android:keyWidth="9%p"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="108"
                android:keyLabel="l"
                android:keyWidth="9%p"
                android:horizontalGap="1%p">
    
            </Key>
        </Row>
        <Row android:verticalGap="1%p">
            <Key
                android:codes="-1"
                android:keyLabel="大写"
                android:keyWidth="17%p"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="122"
                android:keyLabel="z"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="120"
                android:keyLabel="x"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="99"
                android:keyLabel="c"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="118"
                android:keyLabel="v"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="98"
                android:keyLabel="b"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="110"
                android:keyLabel="n"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="109"
                android:keyLabel="m"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="-5"
                android:isRepeatable="true"
                android:keyWidth="17%p"
                android:horizontalGap="1%p">
    
            </Key>
        </Row>
        <Row>
            <Key
                android:codes="-2"
                android:keyLabel="123"
                android:keyWidth="20%p"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="32"
                android:keyLabel="space"
                android:keyWidth="48%p"
                android:horizontalGap="5%p">
    
            </Key>
            <Key
                android:codes="-4"
                android:keyLabel="完成"
                android:keyWidth="20%p"
                android:horizontalGap="5%p">
    
            </Key>
        </Row>
    </Keyboard>
    

    创建keyboard_letter.xml文件(字母键盘布局)

    <?xml version="1.0" encoding="utf-8"?>
    <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
        android:keyWidth="10%p"
        android:keyHeight="7%p"
        android:horizontalGap="0.0px"
        android:verticalGap="0.0px">
        <Row android:verticalGap="1%p">
            <Key
                android:codes="113"
                android:keyLabel="q"
                android:horizontalGap="1.81%p">
    
            </Key>
            <Key
                android:codes="119"
                android:keyLabel="w"
                android:horizontalGap="1.81%p">
    
            </Key>
            <Key
                android:codes="101"
                android:keyLabel="e"
                android:horizontalGap="1.81%p">
    
            </Key>
            <Key
                android:codes="114"
                android:keyLabel="r"
                android:horizontalGap="1.81%p">
    
            </Key>
            <Key
                android:codes="116"
                android:keyLabel="t"
                android:horizontalGap="1.81%p">
    
            </Key>
            <Key
                android:codes="121"
                android:keyLabel="y"
                android:horizontalGap="1.81%p">
    
            </Key>
            <Key
                android:codes="117"
                android:keyLabel="y"
                android:horizontalGap="1.81%p">
    
            </Key>
            <Key
                android:codes="105"
                android:keyLabel="i"
                android:horizontalGap="1.81%p">
    
            </Key>
            <Key
                android:codes="111"
                android:keyLabel="o"
                android:horizontalGap="1.81%p">
    
            </Key>
            <Key
                android:codes="112"
                android:keyLabel="p"
                android:horizontalGap="1.81%p">
    
            </Key>
        </Row>
        <Row android:verticalGap="1%p">
            <Key
                android:codes="97"
                android:keyLabel="a"
                android:keyWidth="9%p"
                android:horizontalGap="5.5%p">
    
            </Key>
            <Key
                android:codes="115"
                android:keyLabel="s"
                android:keyWidth="9%p"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="100"
                android:keyLabel="d"
                android:keyWidth="9%p"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="102"
                android:keyLabel="f"
                android:keyWidth="9%p"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="103"
                android:keyLabel="g"
                android:keyWidth="9%p"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="104"
                android:keyLabel="h"
                android:keyWidth="9%p"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="106"
                android:keyLabel="j"
                android:keyWidth="9%p"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="107"
                android:keyLabel="k"
                android:keyWidth="9%p"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="108"
                android:keyLabel="l"
                android:keyWidth="9%p"
                android:horizontalGap="1%p">
    
            </Key>
        </Row>
        <Row android:verticalGap="1%p">
            <Key
                android:codes="-1"
                android:keyLabel="大写"
                android:keyWidth="17%p"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="122"
                android:keyLabel="z"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="120"
                android:keyLabel="x"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="99"
                android:keyLabel="c"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="118"
                android:keyLabel="v"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="98"
                android:keyLabel="b"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="110"
                android:keyLabel="n"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="109"
                android:keyLabel="m"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="-5"
                android:isRepeatable="true"
                android:keyWidth="17%p"
                android:horizontalGap="1%p">
    
            </Key>
        </Row>
        <Row>
            <Key
                android:codes="-2"
                android:keyLabel="123"
                android:keyWidth="20%p"
                android:horizontalGap="1%p">
    
            </Key>
            <Key
                android:codes="32"
                android:keyLabel="space"
                android:keyWidth="48%p"
                android:horizontalGap="5%p">
    
            </Key>
            <Key
                android:codes="-4"
                android:keyLabel="完成"
                android:keyWidth="20%p"
                android:horizontalGap="5%p">
    
            </Key>
        </Row>
    </Keyboard>
    

    《二》创建IKeyboardView类并继承KeyboardView类,设置键盘布局(数字和字母)

    public class IKeyBoardView extends KeyboardView implements KeyboardView.OnKeyboardActionListener {
    
        public IIKeyBoardView(Context context, AttributeSet attrs) {
            super(context, attrs);
            init();
        }
    
        public IKeyBoardView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            init();
        }
    
        public IIKeyBoardView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
            super(context, attrs, defStyleAttr, defStyleRes);
            init();
        }
    
        /**
         * 数字键盘
         */
        private Keyboard keyboardNumber;
        /**
         * 字母键盘
         */
        private Keyboard keyboardLetter;
        //绑定的输入框
        private EditText mEditText;
    
        /**
         * 是否发生键盘切换
         */
        private boolean changeLetter = false;
    
        /**
         * 是否为大写
         */
        private boolean isCapital = false;
         private List<Integer> noLists = new ArrayList<>();
    
    
        private int[] arrays = new int[]{Keyboard.KEYCODE_SHIFT, Keyboard.KEYCODE_MODE_CHANGE,
                Keyboard.KEYCODE_CANCEL, Keyboard.KEYCODE_DONE, Keyboard.KEYCODE_DELETE,
                Keyboard.KEYCODE_ALT, 32};
    
        //初始化
        private void init(){
            keyboardNumber = new Keyboard(getContext(), R.xml.keyboard_num);
            keyboardLetter = new Keyboard(getContext(), R.xml.keyboard_letter);
            //设置一些不需要预览的键位
            for (int i = 0; i < arrays.length; i++) {
                noLists.add(arrays[i]);
            }
            //默认使用数字键盘
            setKeyboard(keyboardNumber);
            //是否启用预览
            setPreviewEnabled(true);
            //键盘动作监听
            setOnKeyboardActionListener(this);
        }
    
        @Override
        public void onPress(int primaryCode) {
    
        }
    
        @Override
        public void onRelease(int primaryCode) {
    
        }
    
        @Override
        public void onKey(int primaryCode, int[] keyCodes) {
    
        }
    
        @Override
        public void onText(CharSequence text) {
    
        }
    
        @Override
        public void swipeLeft() {
    
        }
    
        @Override
        public void swipeRight() {
    
        }
    
        @Override
        public void swipeDown() {
    
        }
    
        @Override
        public void swipeUp() {
    
        }
    }
    

    《三》 处理自定义键盘按键的点击事件以及预览,并实现数字和字母键盘(包括大小写)之间的切换

    核心代码onKey方法(设置键盘输入)

    //在onKey回调中的代码
    Editable editable = mEditText.getText();
            int start = mEditText.getSelectionStart();
            switch (primaryCode) {
                case Keyboard.KEYCODE_DELETE://删除
                    if (editable != null && editable.length() > 0 && start > 0) {
                        editable.delete(start - 1, start);
                    }
                    break;
                case Keyboard.KEYCODE_MODE_CHANGE://字母键盘与数字键盘切换
                        changeKeyBoard(!changeLetter);
                    break;
                case Keyboard.KEYCODE_DONE://完成
                    changeKeyBoard(!changeLetter);
                    break;
                case Keyboard.KEYCODE_SHIFT://大小写切换
                    changeCapital(!isCapital);
                    setKeyboard(keyboardLetter);
                    break;
                default:
                        editable.insert(start, Character.toString((char) primaryCode));
                    break;
            }
    

    还有几个必要的方法附上

    	/**
         * 切换键盘大小写
         */
        private void changeCapital(boolean b) {
                isCapital = b;
                List<Keyboard.Key> lists = keyboardLetter.getKeys();
                for (Keyboard.Key key : lists) {
                    if (key.label != null && isKey(key.label.toString())) {
                        if (isCapital) {
                            key.label = key.label.toString().toUpperCase();
                            key.codes[0] = key.codes[0] - 32;
                        } else {
                            key.label = key.label.toString().toLowerCase();
                            key.codes[0] = key.codes[0] + 32;
                        }
                    } else if (key.label != null && key.label.toString().equals("小写")) {
                        key.label = "大写";
                    } else if (key.label != null && key.label.toString().equals("大写")) {
                        key.label = "小写";
                    }
                }
        }
    
     	/**
         * 判断此key是否正确,且存在 * * @param key * @return
         */
        private boolean isKey(String key) {
            String lowercase = "abcdefghijklmnopqrstuvwxyz";
            if (lowercase.indexOf(key.toLowerCase()) > -1) {
                return true;
            }
            return false;
        }
    
    	/**
         * 切换键盘类型
         */
        private void changeKeyBoard(boolean b) {
            changeLetter = b;
            if (b) {
                setKeyboard(keyboardLetter);
            } else {
                setKeyboard(keyboardNumber);
            }
        }
    
    /**
         * 判断是否需要预览Key
         *
         * @param primaryCode keyCode
         */
        private void canShowPreview(int primaryCode) {
            if (noLists.contains(primaryCode)) {
                setPreviewEnabled(false);
            } else {
                setPreviewEnabled(true);
            }
        }
    
    	//设置需要绑定的EditView
    	public void setmEditText(EditText mEditText) {
            this.mEditText = mEditText;
        }
    

    《四》 绑定EditText,并且屏蔽系统键盘(实现点击切换绑定多个EditText)

    这块我屏蔽键盘的方式是比较粗暴的,直接在EditTextView当中设置了屏蔽焦点,这样的同时会让EditTextView丢失光标

    public class IEditText extends AppCompatEditText {
        private IKeyboardView mIKeyboardView;
        public IEditText(@NonNull Context context) {
            super(context);
            init();
        }
    
        public IEditText(@NonNull Context context, @Nullable AttributeSet attrs) {
            super(context, attrs);
            init();
        }
    
        public IEditText(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            init();
        }
    
        private void init() {
            setInputType(InputType.TYPE_NULL);
        }
    
        //绑定键盘
        public void setmIKeyboardView(IKeyboardView mIKeyboardView) {
            this.mIKeyboardView = mIKeyboardView;
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            //按下时绑定当前的EditText
            if (event.getAction() == MotionEvent.ACTION_DOWN){
                if (mIKeyboardView!=null){
                    mIKeyboardView.setEditText(this);
                }
            }
            return super.onTouchEvent(event);
        }
        
    }
    

    《五》. 使用

    例如:两个EditTextView一个自定义键盘,因为太简单我就不放出布局代码了(占位置) 就看看咱是如何绑定的

    public class MainActivity extends AppCompatActivity {
    
        private static final String TAG = "MainActivity:";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            MainActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
    
    
            //默认绑定一个EditTextView
            binding.viewKeyboard.setEditText(binding.ed1);
            //点击时切换绑定键盘
            binding.ed1.setmIKeyboardView(binding.viewKeyboard);
            binding.ed2.setmIKeyboardView(binding.viewKeyboard);
        }
    
    }
    

    4.KeyboardView,keyboard,Key,Row属性解释:

    • Keyboard
      在这里插入图片描述
    • Row
      在这里插入图片描述
    • Key
      在这里插入图片描述
    • KeyboardView
      ![在这里插入图片描述](https://img-blog.csdnimg.cn/1e5efd3bbb8248af91cf6beb1ab6b913.png

    5.完整代码

    https://gitee.com/li-weihao1010/keyboard

    6.注意事项

    在清单文件(AndroidManifest.xml)中,
    activity标签下面不要使用该属性
    android:hardwareAccelerated=“true”
    不然会导致你键盘卡顿以及点击事件错位问题

    6.结尾

    如果大家觉得有哪里写得有问题,可以告诉我,一起学习
    参考链接

    展开全文
  • 先上效果图 效果一 效果二 效果三 一:代码如下: <Keyboard android:keyWidth="24.9%p" android:keyHeight="49dp" android:horizontalGap="1%p" android:verticalGap="5px" ...Row android:keyWidth=

    先上效果图

    效果一
    在这里插入图片描述

    效果二

    在这里插入图片描述
    效果三
    在这里插入图片描述

    一:代码如下:

    <Keyboard android:keyWidth="24.9%p"
        android:keyHeight="49dp"
        android:horizontalGap="1%p"
        android:verticalGap="5px"
        xmlns:android="http://schemas.android.com/apk/res/android">
        <Row android:keyWidth="23%p">
            <Key android:codes="49" android:keyEdgeFlags="left" android:keyLabel="1" />
            <Key android:codes="50" android:keyLabel="2" />
            <Key android:codes="51" android:keyLabel="3" />
            <Key android:codes="-5" android:keyIcon="@mipmap/ic_delete" android:isRepeatable="true"/>
        </Row>
        <Row android:keyWidth="23%p">
            <Key  android:codes="52" android:keyLabel="4"/>
            <Key android:codes="53" android:keyLabel="5" />
            <Key android:codes="54" android:keyLabel="6" />
            <Key android:codes="\u5b8c\u6210" android:keyHeight="19%p" android:keyLabel="确定" />
        </Row>
        <Row android:keyWidth="23%p" >
            <Key android:codes="55" android:keyEdgeFlags="left" android:keyLabel="7" />
            <Key android:codes="56" android:keyLabel="8" />
            <Key android:codes="57" android:keyLabel="9" />
        </Row>
        <Row>
            <Key android:codes="48" android:keyLabel="0" android:keyEdgeFlags="left" android:keyWidth="47%p" />
            <Key android:codes="46" android:keyLabel="." android:keyWidth="23%p" />
        </Row>
    </Keyboard>
    
    

    二:代码如下:

    <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
       android:horizontalGap="0px"
       android:verticalGap="0px"
       android:keyHeight="6.5%p"
       android:keyWidth="29.2%p"
       >
       <Row android:verticalGap="1%p">
           <Key android:codes="49" android:keyLabel="1" android:horizontalGap="2%p"/>
           <Key android:codes="50" android:keyLabel="2" android:horizontalGap="2%p"/>
           <Key android:codes="51" android:keyLabel="3" android:horizontalGap="2%p"/>
    
       </Row>
       <Row android:verticalGap="1%p">
           <Key  android:codes="52" android:keyLabel="4" android:horizontalGap="2%p"/>
           <Key android:codes="53" android:keyLabel="5"  android:horizontalGap="2%p"/>
           <Key android:codes="54" android:keyLabel="6"  android:horizontalGap="2%p"/>
       </Row>
       <Row android:verticalGap="1%p" >
           <Key android:codes="55" android:keyLabel="7"  android:horizontalGap="2%p"/>
           <Key android:codes="56" android:keyLabel="8"  android:horizontalGap="2%p"/>
           <Key android:codes="57" android:keyLabel="9"  android:horizontalGap="2%p"/>
       </Row>
       <Row android:verticalGap="1%p" >
           <Key android:codes="48" android:keyLabel="0"  android:keyWidth="60%p" android:horizontalGap="2%p" />
           <Key android:codes="-5" android:isRepeatable="true" android:keyIcon="@mipmap/ic_delete" android:horizontalGap="2%p"/>
       </Row>
       </Keyboard>
    

    三:代码如下:

    <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
        android:horizontalGap="0px"
        android:verticalGap="0px"
        android:keyHeight="6.5%p"
        android:keyWidth="29.2%p"
        >
    
       <Row android:verticalGap="1%p">
            <Key android:codes="49" android:keyLabel="1" android:horizontalGap="2%p"/>
            <Key android:codes="50" android:keyLabel="2" android:horizontalGap="2%p"/>
            <Key android:codes="51" android:keyLabel="3" android:horizontalGap="2%p"/>
            <Key android:codes="-5" android:isRepeatable="true" android:keyIcon="@mipmap/ic_delete" android:horizontalGap="2%p"/>
        </Row>
        <Row android:verticalGap="1%p">
            <Key  android:codes="52" android:keyLabel="4" android:horizontalGap="2%p"/>
            <Key android:codes="53" android:keyLabel="5"  android:horizontalGap="2%p"/>
            <Key android:codes="54" android:keyLabel="6"  android:horizontalGap="2%p"/>
            <Key android:codes="-3" android:isRepeatable="true"  android:keyLabel="完成"  android:horizontalGap="2%p" />
            &lt;!&ndash;android:keyHeight="20%p"&ndash;&gt;
        </Row>
        <Row android:verticalGap="1%p">
            <Key android:codes="55" android:keyLabel="7"  android:horizontalGap="2%p"/>
            <Key android:codes="56" android:keyLabel="8"  android:horizontalGap="2%p"/>
            <Key android:codes="57" android:keyLabel="9"  android:horizontalGap="2%p"/>
        </Row>
        <Row android:verticalGap="1%p" >
            <Key android:codes="48" android:keyLabel="0"  android:keyWidth="60%p" android:horizontalGap="2%p" />
            <Key android:codes="46" android:keyLabel="."  android:horizontalGap="2%p"/>
        </Row>
        </Keyboard>
    

    以上是自定义键盘的三种效果

    展开全文
  • 关于Android自定义控件,之前也写了两个,一个是简单地继承View,另一个通过继承Layout实现一个省市联动控件。这篇,将通过继承ViewGroup来实现一个电话拨打小键盘。本人一贯风格,懒得罗里吧嗦讲一大堆,直接上图...
  • android-自定义键盘的设置】

    千次阅读 2022-04-30 15:11:56
    第一步,在哪个地方放自定义键盘?那个地方放输入? 我打算在这个最下面放我的键盘 因此在这个xml文件中添加键盘的组件,为它设置参数,给它id,长,宽,背景,字体颜色,是否聚焦等 <android....

    效果图

    在这里插入图片描述

    第一步,在哪个地方放自定义的键盘?那个地方放输入?

    我打算在这个最下面放我的键盘
    在这里插入图片描述
    因此在这个xml文件中添加键盘的组件,为它设置参数,给它id,长,宽,背景,字体颜色,是否聚焦等

    
        <android.inputmethodservice.KeyboardView
            android:id="@+id/frag_record_rl_key"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:keyBackground="@color/grey_f3f3f3"
            android:keyTextColor="@color/black"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:paddingTop="1dp"
            android:layout_alignParentBottom="true"
            android:shadowColor="@color/white"
            android:shadowRadius="0.0"/>
            
    

    输入的地方 EditText为输入文本的地方

            <EditText
                android:id="@+id/frag_rl_top_money"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:inputType="number"
                android:layout_centerVertical="true"
                android:layout_alignParentRight="true"
                android:text="0"
                android:background="@color/white"
                />
    

    第二部,设置键盘

    第一步我们确定了键盘的位置,现在详细设置这个键盘,我们在res目录下创造一个xml的文件夹,在此文件夹中新建一个key.xml的文件,这个文件将详细设置键盘,具体到每一个按键。
    android:keyHeight,android:keyWidth为键盘按键的高度,宽度
    code表示代码这个是有规定的,lable为真正代表的内容

    <?xml version="1.0" encoding="utf-8"?>
    <Keyboard xmlns:android="http://schemas.android.com/apk/res/android">
        <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>
    </Keyboard>
    

    第三步,键盘的逻辑代码编写

    在java文件夹下建立utils文件夹 keyutils

    package com.example.notebook.utils;
    
    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.notebook.R;
    
    public class keyutils {
        private final Keyboard k1; //自定义的键盘
        private KeyboardView keyboardView;
        private EditText editText;
    
        public keyutils(Keyboard k1, KeyboardView keyboardView, EditText editText) {
            this.k1 = k1;
            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);//设置键盘按钮被点击了的监听
        }
    
        private interface OnEnsureListener{
            public void onEnsure();
        }
        OnEnsureListener onEnsureListener;
    
        public void setOnEnsureListener(OnEnsureListener onEnsureListener) {
            this.onEnsureListener = onEnsureListener;
        }
    
        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();
                switch (i) {
                    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)i));
                        break;
                        
                }
    
    
            }
    
            @Override
            public void onText(CharSequence charSequence) {
    
            }
    
            @Override
            public void swipeLeft() {
    
            }
    
            @Override
            public void swipeRight() {
    
            }
    
            @Override
            public void swipeDown() {
    
            }
    
            @Override
            public void swipeUp() {
    
            }
        };
        //    显示键盘
        public void showKey(){
            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);
            }
        }
    }
    
    
    展开全文
  • 在项目中,产品对于输入方式会有特殊的要求,需要对输入方式增加特定的限制,这就需要采用自定义键盘。本文主要讲述数字键盘和字母键盘的自定义实现。自定义键盘的实现步骤如下:自定义CustomKeyboard, 继承自系统...
  • 主要给大家介绍了关于Android开发之如何自定义数字键盘的相关资料,本文语言是基于kotlin实现的,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
  • 主要为大家详细介绍了Android自定义密码输入框和数字键盘的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 实现这个自定义键盘的思路很简单: 要写出一个数字键盘的布局; 与 Edittext 结合使用,对每个按键的点击事件进行处理; 禁用系统软键盘。 有了思路,实现起来就不难了。 1. 实现键盘的 xml 布局 网格样式的布局...
  • 安卓TV开发之自定义键盘,对应博客地址,https://blog.csdn.net/zhangxiangliang2/article/details/82751681
  • gpio keys子系统就是为了实现GPIO+按键实现键盘功能。在一些不支持USB键盘的应用场景非常有用。 实现DTS的修改: 这里说明一下键值,如上图中的linux,code对应的值,这个可以在内核原码相关头文件中查到: include...
  • 1、实现原理实现软键盘主要用到了系统的两个类Keyboard和KeyboardView.html1. Keyboard用于监听虚拟键盘:javaLoads an XML description of a keyboard and stores the attributes of the keys. A keyboard consists...
  • | android:verticalCorrection | Amount to offset the touch Y coordinate by, for bias correction. | 我们需要建一个xml文件,来布局我们的视图, 一般是在res文件夹中建一个名为xml的文件夹...一些可以自定义设置
  • 我正在尝试为Android创建自定义键盘.我使用软键盘示例应用程序作为起点.我的问题是我无法在键盘中居中,而我在网上找到的其他样本显然有效.我的XML文件如下所示:android:horizontalGap="@dimen/horizontal_gap...
  • Android绑定EditText自动弹出自定义键盘不同按键设置不同背景的实现(自动向上顶适应布局),适配带虚拟键盘的特殊机型,
  • 一、软键盘介绍 实现软键盘主要用到了系统的两个类:Keyboard和KeyboardView。 Keyboard类源码的介绍是: Listener for virtual keyboard events.即用于监听虚拟键盘。 KeyboardView类源码的介绍是: A view th...
  • 最近公司应用到了实名认证相关的功能,这部分需要一个身份证的EditText, 自然也需要一个身份证的键盘,奈何系统没有这种键盘,只能自定义一个。 首先来看android SDK为我们提供Keyboard的这个类。 #####1、Keyboard ...
  • 定义按键声音 创建一个方法,这个方法的作用就是当我们按下某个键时发出一个声音,我们使用 AudioManager 来播放这个声音,Android SDK给我们提供了一些键盘的声效,我们在自己定义的playClick()方法中使用。...
  • 我正在使用自定义键盘应用程序我需要设置或更改键盘的背景主题或颜色.在我的应用程序中,我们可以选择不同的背景主题和不同颜色的键行.在第一次启动应用程序时它工作正常,但下次自定义键盘显示主题时不会更改.我正在...
  • 前言也是最近想写个demo玩玩,不知道写哪个方面的好,就随便写了一个自定义键盘,比较简单,但是做了封装,支持jitpack库依赖(这也是我第一次开源自己的库,比较水的一个开源项目,仅供学习使用)。概述主要完成了...
  • android自定义键盘

    2019-11-29 10:58:42
    其实对于简单的键盘,比如数字键盘这种,使用自定义view即可,这里为了学习android键盘知识,继承android系统键盘。 先看效果图: 一、在res/xml目录下新建一个键盘布局文件 <?xml version="1.0" encoding...
  • 现在很多场景需要使用自定义键盘,比如银行app的乱序密码键盘。现在做个demo,用最快的速度、最少...KeyboardKeybard类可以加载一个描述键盘按键的xml文件,demo里的按键布局如下:android:horizontalGap="1dp"andr...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,382
精华内容 2,552
关键字:

android自定义键盘按键