首页 > 其他分享 >andorid开发--记账本(五)

andorid开发--记账本(五)

时间:2024-02-19 23:00:12浏览次数:17  
标签:-- editText void keyboardView Override 记账 andorid import public

软键盘的绘制以及逻辑编写

在res包下创建一个xml文件夹,创立一个key.xml

<?xml version="1.0" encoding="utf-8"?>

<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
    android:keyHeight="50dp"
    android:keyWidth="20%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>

建立对应的utils的包

KeyBoardUtils

package com.example.myapplication.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.myapplication.R;

public class KeyBoardUtils {
    
    private KeyboardView keyboardView;
    private EditText editText;
    private final Keyboard k1;//自定义键盘

    public interface OnEnsureListener{
        public void onEnsure();
    }
    
    OnEnsureListener onEnsureListener;

    public void setOnEnsureListener(OnEnsureListener onEnsureListener) {
        this.onEnsureListener = onEnsureListener;
        
    }

    public KeyBoardUtils(KeyboardView keyboardView, EditText editText) {
        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);//设置键盘按钮被点击的监听
    }
    
    KeyboardView.OnKeyboardActionListener listener=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 = editText.getText();
            int start = editText.getSelectionStart();
            switch (primaryCode) {
                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)primaryCode));
                    break;
            }
        }

        @Override
        public void onText(CharSequence text) {
        }

        @Override
        public void swipeLeft() {
        }

        @Override
        public void swipeRight() {
        }

        @Override
        public void swipeDown() {
        }

        @Override
        public void swipeUp() {
        }
    };
    
    //显示键盘
    public void showKeyboard(){
        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);
        }
    }
    
}

标签:--,editText,void,keyboardView,Override,记账,andorid,import,public
From: https://www.cnblogs.com/gyg1222/p/18018590

相关文章

  • python的类机制
    python的类机制参考:python面向对象概念方法重写/覆盖:若从父类继承的方法不能满足子类的需求,可以对其进行改写。类变量:在实例化对象中是公用的,定义在类中,且在函数体之外,通常不作为实体变量使用。局部变量:定义在方法中的变量,只作用在当前实例。实例变量:在类的声明中,属性是......
  • 状态机
    状态机四大概念状态(State)一个状态机至少包含两个状态,并且有初始状态。事件(Event)一个行为,一个动作的触发条件,一个事件对应一个动作。动作(Action)事件发生后要执行的动作。执行完动作后要有相应的状态变换。变换(Transition)表示一个状态变成另一种状态的过程。在执行......
  • 通过软考后却领取不到实体证书?
    软考考试通过后,会有相应的等级证书,证书有电子证书和实体证书两种。本人为广州市的考生,在软考网一直没看到申请邮寄的功能开放,最终实体证书在中国广州人社局申请邮寄获取到的。目前了解到获取实体证书的两个网站方式一:软考网申请邮寄软考网:https://bm.ruankao.org.cn/sign/w......
  • day02
    day02目录day02指令修饰符"."按键修饰符事件修饰符v-bind对样式控制的增强—:class普通语法对象语法数组语法tab栏切换导航高亮v-bind对有样式控制的增强—:style语法编写进度条css显示进度v-model在其他表单元素的使用computed计算属性概念语法注意computed计算属......
  • 淡役
    这是一篇对张津宁初中奥赛生选拔失败的...额,其实近一年,我学了不少,在奥赛上付出不少心血,也有了点点的进步1).csp-j(没打过一场模拟赛的我果然tle了)15分2)这是第一场模拟3)这是第二场模拟4)这是第三场战时逃亡的模拟但是我还是被筛下来了...连机会都没有...只能看天了.........
  • day01
    day01目录day01渐进式Vue的两种开发方式:框架创建Vue实例插值表达式{作用:利用表达式进行插值,渲染到页面中语法注意响应式特性访问和修改data中的数据Vue中的常用指令内容渲染指令条件渲染指令事件绑定指令属性绑定指令列表渲染指令v-for中的key双向绑定指令关于v-model......
  • golang运算符&流程控制
    运算符算数运算funcmain(){ varaint=10 varbint=8 varc=3.14 vard=5.15 fmt.Println(a+b)//18 fmt.Println(a-b)//2 fmt.Println(a*b)//80 fmt.Println(a/b)//1,Go中,如果运算的都是整数,相除后会默认去掉小数,保留整数部分, fmt.Pr......
  • 20240217
    创建拥有多的页面的单Activity应用,使用Jetpack的导航和其他组件1.介绍在这个记账本App中,我们不仅需要一个页面来记录支出和收入,还需要一个页面来显示支出和收入的统计信息。当然我们可以使用两个Activity来实现这个功能,但是Google更推荐的方式是使用单Activity多Fragment的架构......
  • day03
    day03目录day03Vue生命周期Vue生命周期钩子工程化开发和脚手架开发Vue的两种方式脚手架VueCLI基本介绍好处使用步骤项目目录介绍和运行流程项目目录介绍运行流程组件化开发根组件App.vue组件是由三部分构成普通组件的注册使用—局部注册特点步骤使用方式注意语法普通组......
  • Windows也能拥有好用的命令行吗?Powershell+Terminal折腾记录(v1.0版本)
    PS:本文写于2021年,现在已经是2024年,有了很多新变化,我在接下来的文章里会继续更新。前言Windows一向以图形化操作入门容易著称,所以对于命令行的支持一直为人所诟病,比起Linux或者mac都是被吊打的。这一局面在最近几个版本的Windows10更新里,特别是微软官方出了WindowsTerminal这个大......