我们自定义的每一个按键都将会有一个 codes
值,比如回退我们就写成:
<Key android:codes=“-5”
android:keyIcon=“@drawable/sym_keyboard_delete”/>
再监听就是:
if (primaryCode == Keyboard.KEYCODE_DELETE){}
这就表示,监听 delete
事件了!
定义 <Key/>
标签时常用到的 codes / KEYCODE
有:
public static final int KEYCODE_SHIFT = -1;
public static final int KEYCODE_MODE_CHANGE = -2;
public static final int KEYCODE_CANCEL = -3;
public static final int KEYCODE_DONE = -4;
public static final int KEYCODE_DELETE = -5;
public static final int KEYCODE_ALT = -6;
2. KeyboardView
处理绘制,检测按键,触摸动作:
- A view that renders a virtual
Keyboard
. It handles rendering of keys and detecting key presses and touch movements.
我们会在Activity的xml文件中这样定义:
<android.inputmethodservice.KeyboardView
android:id=“@+id/keyboard_view”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:layout_alignParentBottom=“true”
android:background=“@color/gray”
android:focusable=“true”
android:focusableInTouchMode=“true”
android:keyBackground=“@drawable/bg_keyboard_selector”
android:keyTextColor=“@color/keyTextColor”
android:visibility=“gone”
android:keyPreviewLayout=“@layout/key_preview_layout”
/>
- 其中
android:keyPreviewLayout
指的是每当我们点击键盘上的某个键时,短暂弹出的布局。
| 属性名 | 描述 |
| — | — |
| android:keyBackground | Image for the key. |
| android:keyPreviewLayout | Layout resource for key press feedback. |
| android:keyPreviewOffset | Vertical offset of the key press feedback from the key. |
| android:keyTextColor | Color to use for the label in a key. |
| android:keyTextSize | Size of the text for character keys. |
| android:labelTextSize | Size of the text for custom keys with some text and no icon. |
| android:popupLayout | Layout resource for popup keyboards. |
| android:verticalCorrection | Amount to offset the touch Y coordinate by, for bias correction. |
- 我们需要建一个
xml文件
,来布局我们的视图,
一般是在res
文件夹中建一个名为xml的文件夹,在里面新建立一个xml布局文件。
- 每一个按键的属性主要包括
android:codes=" " 和 android:keyLabel=""
Activity
就是根据 codes
的值来监听的。
一些可以自定义设置,一些需要是 keyboard
中设置好的,要保持一致。
二、实例解析:在xml文件中定义
1. 效果图:
建一个类,用于处理软键盘事件,文件名为 KeyboardUtil.java
2. 定义键盘的键
键盘上键的细节和它的位置我们指定在一个xml文件中,每一个键都有如下的属性,
-
keyLabel
这个属性是指每个键显示的文本 -
codes
这个属性是指这个键代表的字符的unicode
例如,我们定义了一个字母A,
codes
属性的值是97,keyLabel
属性的值就是A
如果一个code对应多个key,这个key代表的字符取决于这个key接受到的点击数taps,例如,一个键具有63,33,58编码:
-
一次点击就是 ?
-
两次点击就是 !
-
三次点击就是 :
一个 key
还可以有一些可选的属性:
keyEdgeFlags
这个属性的值可以是left
或者right
这个属性通常加在一行中最左边和最右边的键上。
-
keyWidth
这个属性定义了键的宽度,通常是一个百分比的值。 -
isRepeatable
这个属性如果设置为true
,那么当长按该键时就会
重复接受到该键上的动作,在 删除键键 和 空格键 上通常设为true
。
键盘上的键都是按行分组,通常情况下我们每行上的键限制到10个以内
英文键盘建议每个键占整个键盘宽度的10%,我们将键的高度设置为60dp,这个值可以调整,但是不建议设置低于48dp .
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
写在最后
在技术领域内,没有任何一门课程可以让你学完后一劳永逸,再好的课程也只能是“师傅领进门,修行靠个人”。“学无止境”这句话,在任何技术领域,都不只是良好的习惯,更是程序员和工程师们不被时代淘汰、获得更好机会和发展的必要前提。
如果你觉得自己学习效率低,缺乏正确的指导,可以一起学习交流!
加入我们吧!群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。
35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
ps://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算