技术标签: android开发 Android开发笔记 软键盘 InputMethod 输入法 android KeyboardView
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
android:keyWidth="34%p" android:horizontalGap="1px"
android:verticalGap="1px" android:keyHeight="55dp">
<Row>
<Key android:codes="49" android:keyLabel="1"/>
<Key android:codes="50" android:keyLabel="2" />
<Key android:codes="51" android:keyLabel="3"/>
</Row>
<Row>
<Key android:codes="52" android:keyLabel="4" />
<Key android:codes="53" android:keyLabel="5" />
<Key android:codes="54" android:keyLabel="6" />
</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:keyEdgeFlags="left"
android:keyIcon="@drawable/sym_keyboard_done" />
<Key android:codes="48" android:keyLabel="0" />
<Key android:codes="-5"
android:isRepeatable="true"
android:keyEdgeFlags="right"
android:keyIcon="@drawable/sym_keyboard_delete" />
</Row>
</Keyboard>
上面这个xml键盘布局,到时候将作为自定义属性传给软键盘控件,所以要在res/values/attrs.xml中补充下列属性配置:
<declare-styleable name="keyboard">
<attr name="xml" format="reference" />
</declare-styleable>
public class KeyboardLayout extends LinearLayout {
private KeyboardView mKeyboardView;
private Keyboard mKeyboard;
public KeyboardLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initKeyboard(context, attrs);
}
private void initKeyboard(Context context, AttributeSet attrs){
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.keyboard);
if (a.hasValue(R.styleable.keyboard_xml)) {
//从xml文件中获取键盘布局
int xmlid = a.getResourceId(R.styleable.keyboard_xml,0);
mKeyboard = new Keyboard(context, xmlid);
mKeyboardView = (KeyboardView)LayoutInflater.from(context).inflate(R.layout.keyboardview, null);
//为键盘视图设置自定义的键盘布局
mKeyboardView.setKeyboard(mKeyboard);
mKeyboardView.setEnabled(true);
mKeyboardView.setPreviewEnabled(false);
addView(mKeyboardView);
}
}
}
public void setInputWidget(EditText et) {
mKeyboardView.setOnKeyboardActionListener(new KeyboardListener(et));
}
private class KeyboardListener implements OnKeyboardActionListener {
private EditText et;
public KeyboardListener(EditText et) {
this.et = et;
}
@Override
public void onKey(int primaryCode, int[] keyCodes) {
Editable editable = et.getText();
int start = et.getSelectionStart();
if (primaryCode == Keyboard.KEYCODE_DELETE) { //退格键
if (editable != null && editable.length() > 0) {
if (start > 0) {
editable.delete(start - 1, start);
}
}
} else if(primaryCode>='0' && primaryCode<='9') {
//可以直接输入的字符(如0-9),它们在键盘映射xml中的keycode值必须配置为该字符的ASCII码
editable.insert(start, Character.toString((char) primaryCode));
}
}
//此处省略其它无需具体实现的Override函数
};
<com.example.exmtextinput.widget.KeyboardLayout
android:id="@+id/kl_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
mykeyboard:xml="@xml/inputkeyboard" />
#Qt pro文件下跨平台宏的使用(windows/linux 以及x86 和 arm的区分)在pro文件中添加:#仅在linux 系统下, 硬件平台无关的内容unix{ HEADERS += \ SOURCES += \ Manager.cpp \}#arm64 的编译宏contains(QMAKE_HOST.arch, aarch64){#aarch64 是编译器类型,如果不是这个编译器, 可以把.arch 替换成对应的类型#arm 64平台 _qt pro win linux
什么是MySQLMySQL 是一款安全、跨平台、高效的,并与 PHP、Java 等主流编程语言紧密结合的数据库系统。该数据库系统是由瑞典的 MySQL AB 公司开发、发布并支持,由 MySQL 的初始开发人员 David Axmark 和 Michael Monty Widenius 于 1995 年建立的。MySQL 的象征符号是一只名为 Sakila 的海豚,代表着 MySQL 数据库的速度、能力、精确和优秀本质。MySQL发展史1979年,一位叫Monty Widenius的程序员,在名为T_mysql是一个安全可靠、跨平台、高效率的,拥有的速度快、能力高、精确性和优秀本质
【1】在安装博途时,一直要求重启电脑的提示:如下图所示:【2】如果出现上图所以提示:需要进行如下操作:【3】在电脑开始菜单里右击----选择运行---点击运行命令:会弹出如下图操作:【4】:删掉注册表的键值:如下图的位置:【5】删掉上图所以键值后 ,再运行博途安装文件:【6】注意事项:注册表在操作电脑过程中会自动增加上图注册表键值,所以在每安装博..._博图v18 必须重启计算机才能继续运行安装程序
光照和材质已经使三维图形具有较强的立体感, 如果给三维网格填充上二维图形 (纹理, Texture), 则可表现出更为逼真的场景效果.第六步: 纹理(一) 使用方法1. 声明IDirect3DTecture对象;2. 声明纹理坐标顶点;3. 创建纹理 (文件导入或光影贴图);4. 设置纹理层 (texture stage);5. 指定绘制纹理;6. 绘制网格.
在vue-cli的脚手架创建后开发环境调试下webpack-dev-server是如何读取webpack.dev.conf.js中的内容的_--inline --progress
scikit-learn教程航路开辟者:江季领航员:李牧轩航海士:武帅、陈宇基本信息开源内容::https://github.com/datawhalechina/machine-learning-toy-code/tree/main/ml-with-sklearn内容属性:公测课程内容说明:实用sklearn学习库进行各类算法的实战,并且善用可视化技术润色结果。定位人群:具有一定机器学习概念以及Python编程的同学。特别提示:本教程重在负责实际的编程实践,相关理论知识需同学自行补
FlumeFlume是一款在数据收集领域使用较多的一个apache的开源工具,是一款分布式、可靠和高可用的系统,能够高效的从不同的源中收集、聚合上传大量的日志数据到结构化的存储模块中,Flume的使用不仅限于日志数据聚合, 由于数据源是可定制的,因此Flume可用于传输大量事件数据,包括但不限于网络流量数据,社交媒体生成的数据,电子邮件消息以及几乎所有可能的数据源。在实际的应用场景中Flume再..._flume 自定义source readevent commit 执行原理
为什么80%的码农都做不了架构师?>>> ...
浮点型转字符串:>>> f1=123.123#定义一个浮点型变量>>> f2 = str(f1)#将浮点型转为字符串>>> f2'123.123'#浮点型已经转换为字符串>>>整形转字符串>>> f3=1>>> f4=str(f3)>>> f4'1'#整数1 被转换成字符串'1'>>>..._python浮点型转换为字符串
转载自 Java synchronized 中的while 和 notifyAll 问题1 为什么是while 而不是if大多数人都知道常见的使用synchronized代码:synchronized (obj) { while (check pass) { wait(); } // do your business}那么问题是为..._notifyall while
输入精度e,使用格雷戈里公式求π的近似值,精确到最后一项的绝对值小于e。要求定义和调用函数funpi(e)求π的近似值。4/π=1−1/3+1/5−1/7+...输入格式:输入在一行中给出精度e。输出格式:对每一组输入,在一行中输出π的近似值。输入样例:0.0001输出样例:pi = 3.141793#include<std..._7-2 求π的近似值
网上查了会儿资料,也没查出什么有用的中文资料来,所以就按平时的积累来写了。本文主要记载各种网卡中的内容,及在Linux下烧写的方法。平时的工作中遇到过4种网卡,8139, 8100, 8169, 8110,对于不同的网卡,EEPROM中的内容一般是不同的。 先扔出8139的eeprom内容:(通过烧写器把芯片里面的内容读出来,再通过hexdump工具变_网卡eeprom解析