首页 > 其他分享 >安卓家庭记账本开发笔记6(补2月2日)

安卓家庭记账本开发笔记6(补2月2日)

时间:2024-02-22 19:00:42浏览次数:27  
标签:editText void keyboardView 笔记 public 记账 Override android 安卓

完成自定义软键盘的绘制和逻辑编写

在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="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>
在软件文件夹中创建一个名为utils的文件夹,在其中创建一个java类文件命名为keyboardutil文件完成软键盘的逻辑编写
代码如下:
package com.example.myapplication1.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.myapplication1.R;

public class KeyBoardUtils {
private final Keyboard k1;
private KeyboardView keyboardView;
private EditText editText;

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,笔记,public,记账,Override,android,安卓
From: https://www.cnblogs.com/czfznb/p/18027965

相关文章

  • 安卓家庭记账本开发笔记5(补2月1日)
    完成自定义软键盘的编写以及软键盘上面的备注和时间在记录页面的代码底下加上下面的代码<android.inputmethodservice.KeyboardViewandroid:id="@+id/frag_record_keyboard"android:layout_width="match_parent"android:layout_height="wrap_content"......
  • 【图论】基环树 学习笔记
    基环树下面几个条件互相等价:一个图(连通块)是基环树联通块有n个点n条边图上存在且仅存在一个环,且环上每个节点是一颗子树的根。通常情况下树指的都是无向图,但是有向图也可以构成基环树。内向基环树:每个点都有一条出边。容易发现沿着这条边一定会走到环上“向内走”。外......
  • Vue学习笔记11--事件
    示例一:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Vue事件的基本使用</tit......
  • 概率与期望学习笔记(copy)
    概率&期望样本空间、随机事件定义一个随机现象中可能发生的不能再细分的结果被称为样本点。所有样本点的集合称为样本空间,通常用\(\Omega\)来表示。一个随机事件是样本空间\(\Omega\)的子集,它由若干样本点构成,用大写字母\(A,B,C,\cdots\)表示。对于一个随机现......
  • Python笔记11——函数
    十一、函数函数的作用:提高模块化程度,提高代码重复利用率。11.1定义一个函数一般格式:def函数名(参数列表):函数体以def关键字开头,后接函数标识符名称和圆括号()。所需参数必须都在圆括号中声明。(默认参数值和参数名称是按函数声明中定义的顺序匹配起来的。)函数内容以......
  • 《程序是怎么跑起来的》第2章读书笔记
    在看完第1章计算机的构造和其原理之后,就来到了第2章与其数据有关的理解。那么电脑里的数据是怎样来处理的呢?从第2章的学习中我理解到计算机它只有零和一两种数字而其他的都是由这两种数字来组成的。也就是说外界通过01的组成多种多样的类型来表现出不同的东西,从而展示给观看者。它......
  • 安卓数据库操作
    安卓数据库的操作:今天主要学了下安卓数据库方面的简单知识。数据库主要用于复杂的数据储存。安卓数据库简介:安卓SQLite数据库是一款轻量级的关系型数据库,它的运算速度非常快,占用资源很少,通常只需要几百KB的内存就足够了。SQLite不仅支持标准的SQL语法,还遵循了数据库的ACID事......
  • Vue学习笔记10--数据代理
    数据代理:通过一个对象代理对另一个对象属性的操作(读或写) 代码如下所示:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0">......
  • 如何保障员工在外出办公时,笔记本电脑内的重要资料的安全?
    在当今高度移动化的商务环境中,外出办公已经成为了一种常态。但同时,这也带来了一个新的安全问题:如何保证员工在外出办公时,笔记本电脑内的重要资料的安全?现在,让我们一起来看看华企盾DSC数据防泄密系统是如何解决这个问题的。华企盾DSC数据防泄密系统提供了多种针对性的解决方案。......
  • Vue学习笔记9--Object.defineProperty()
    Object.defineProperty()语法说明Object.defineProperty()的作用就是直接在一个对象上定义一个新属性,或者修改一个已经存在的属性obj需要定义属性的当前对象Object.defineProperty(obj,prop,desc)==》obj需要定义属性的当前对象prop当前需要定义的属性名desc属性描述......