<Key
android:codes=“60001”
android:isRepeatable=“true”
android:keyLabel=“DEL” />
<Key
android:codes=“52”
android:keyEdgeFlags=“left”
android:keyLabel=“4” />
<Key
android:codes=“53”
android:keyLabel=“5” />
<Key
android:codes=“54”
android:keyLabel=“6” />
<Key
android:codes=“48”
android:keyLabel=“0” />
<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=“60002”
android:keyLabel=“Cancel” />
常量
和输入法布局codes对应
package com.demo.customime;
public interface Constant {
int CodeDelete = 60001;
int CodeCancel = 60002;
}
KeyboardBuilder
package com.demo.customime;
import android.app.Activity;
import android.inputmethodservice.Keyboard;
import android.inputmethodservice.KeyboardView;
import android.text.Editable;
import android.text.InputType;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
public class KeyboardBuilder {
private static final String TAG = “KeyboardBuilder”;
private Activity mActivity;
private KeyboardView mKeyboardView;
public KeyboardBuilder(Activity ac, KeyboardView keyboardView,
int keyBoardXmlResId) {
mActivity = ac;
mKeyboardView = keyboardView;
Keyboard mKeyboard = new Keyboard(mActivity, keyBoardXmlResId);
// Attach the keyboard to the view
mKeyboardView.setKeyboard(mKeyboard);
// Do not show the preview balloons
mKeyboardView.setPreviewEnabled(false);
KeyboardView.OnKeyboardActionListener keyboardListener = new KeyboardView.OnKeyboardActionListener() {
@Override
public void onKey(int primaryCode, int[] keyCodes) {
// Get the EditText and its Editable
View focusCurrent = mActivity.getWindow().getCurrentFocus();
if (focusCurrent == null || !(focusCurrent instanceof EditText)) {
return;
}
EditText edittext = (EditText) focusCurrent;
Editable editable = edittext.getText();
int start = edittext.getSelectionStart();
// Handle key
if (primaryCode == Constant.CodeCancel) {
hideCustomKeyboard();
} else if (primaryCode == Constant.CodeDelete) {
if (editable != null && start > 0) {
editable.delete(start - 1, start);
}
} else {
// Insert character
editable.insert(start,
Character.toString((char) primaryCode));
}
}
@Override
public void onPress(int arg0) {
}
@Override
public void onRelease(int primaryCode) {
}
@Override
public void onText(CharSequence text) {
}
@Override
public void swipeDown() {
}
@Override
public void swipeLeft() {
}
@Override
public void swipeRight() {
}
@Override
public void swipeUp() {
}
};
mKeyboardView.setOnKeyboardActionListener(keyboardListener);
}
// 绑定一个EditText
public void registerEditText(EditText editText) {
// Make the custom keyboard appear
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
showCustomKeyboard(v);
} else {
hideCustomKeyboard();
}
}
});
editText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, “onClick”);
showCustomKeyboard(v);
}
});
editText.setOnTouchListener(new View.OnTouchListener() {
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
Android进阶资料
以下的资料是近年来,我和一些朋友面试收集整理了很多大厂的面试真题和资料,还有来自如阿里、小米、爱奇艺等一线大厂的大牛整理的架构进阶资料。希望可以帮助到大家。
Android进阶核心笔记
百万年薪必刷面试题
最全Android进阶学习视频
码讲义、实战项目、讲解视频,并且后续会持续更新**
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-pTaKw23A-1711623745976)]
Android进阶资料
以下的资料是近年来,我和一些朋友面试收集整理了很多大厂的面试真题和资料,还有来自如阿里、小米、爱奇艺等一线大厂的大牛整理的架构进阶资料。希望可以帮助到大家。
Android进阶核心笔记
[外链图片转存中…(img-b8yfVMsE-1711623745977)]
百万年薪必刷面试题
[外链图片转存中…(img-qQUxthWH-1711623745977)]
最全Android进阶学习视频