package cn.key;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
import android.app.Activity;
import android.content.Context;
import android.inputmethodservice.Keyboard;
import android.inputmethodservice.Keyboard.Key;
import android.inputmethodservice.KeyboardView;
import android.inputmethodservice.KeyboardView.OnKeyboardActionListener;
import android.text.Editable;
import android.text.Selection;
import android.text.Spannable;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class KeyboardUtil {
private Activity mActivity;
@SuppressWarnings("unused")
private Context mContext;
@SuppressWarnings("unused")
private KeyboardView keyboardView;
private Keyboard keyAlp;// 字母键盘
private Keyboard keyDig;// 数字键盘
public boolean isnun = false;// 是否数字键盘
public boolean isupper = false;// 是否大写
private EditText ed;
public KeyboardUtil(Activity mActivity,Context mContext, EditText edit) {
this.mActivity=mActivity;
this.mContext = mContext;
this.ed = edit;
keyAlp = new Keyboard(mContext, R.xml.qwerty);
keyDig = new Keyboard(mContext, R.xml.symbols);
keyboardView = (KeyboardView) mActivity.findViewById(R.id.keyboard_view);
randomalpkey();
//keyboardView.setKeyboard(keyAlp);
keyboardView.setEnabled(true);
keyboardView.setPreviewEnabled(true);
keyboardView.setOnKeyboardActionListener(listener);
}
private OnKeyboardActionListener listener = new OnKeyboardActionListener() {
@Override
public void swipeUp() {
}
@Override
public void swipeRight() {
}
@Override
public void swipeLeft() {
}
@Override
public void swipeDown() {
}
@Override
public void onText(CharSequence text) {
}
@Override
public void onRelease(int primaryCode) {
}
@Override
public void onPress(int primaryCode) {
}
@Override
public void onKey(int primaryCode, int[] keyCodes) {
Editable editable = ed.getText();
int start = ed.getSelectionStart();
if (primaryCode == Keyboard.KEYCODE_CANCEL) {// 完成
hideKeyboard();
Toast.makeText(mContext, ed.getText().toString(), Toast.LENGTH_LONG).show();
} else if (primaryCode == Keyboard.KEYCODE_DELETE) {// 回退
if (!TextUtils.isEmpty(editable)) {
if (start > 0) {
editable.delete(start - 1, start);
}
}
} else if (primaryCode == Keyboard.KEYCODE_SHIFT) {// 大小写切换
changeKey();
keyboardView.setKeyboard(keyAlp);
} else if (primaryCode == Keyboard.KEYCODE_MODE_CHANGE) {// 数字键盘切换
if (isnun) {
isnun = false;
randomalpkey();
} else {
isnun = true;
randomdigkey();
}
}else {
editable.insert(start, Character.toString((char) primaryCode));
}
}
};
/**
* 键盘大小写切换
*/
private void changeKey() {
List<Key> keylist = keyAlp.getKeys();
if (isupper) {// 大写切换小写
isupper = false;
for (Key key : keylist) {
if (key.label != null && isword(key.label.toString())) {
key.label = key.label.toString().toLowerCase();
key.codes[0] = key.codes[0] + 32;
}
}
} else {// 小写切换大写
isupper = true;
for (Key key : keylist) {
if (key.label != null && isword(key.label.toString())) {
key.label = key.label.toString().toUpperCase();
key.codes[0] = key.codes[0] - 32;
}
}
}
}
public void showKeyboard() {
int visibility = keyboardView.getVisibility();
if (visibility == View.GONE || visibility == View.INVISIBLE) {
keyboardView.setVisibility(View.VISIBLE);
}
}
public void hideKeyboard() {
int visibility = keyboardView.getVisibility();
if (visibility == View.VISIBLE) {
keyboardView.setVisibility(View.INVISIBLE);
}
}
private boolean isNumber(String str) {
String wordstr = "0123456789";
if (wordstr.indexOf(str) > -1) {
return true;
}
return false;
}
private boolean isword(String str) {
String wordstr = "abcdefghijklmnopqrstuvwxyz";
if (wordstr.indexOf(str.toLowerCase()) > -1) {
return true;
}
return false;
}
private void randomdigkey(){
List<Key> keyList = keyDig.getKeys();
// 查找出0-9的数字键
List<Key> newkeyList = new ArrayList<Key>();
for (int i = 0; i < keyList.size(); i++) {
if (keyList.get(i).label != null
&& isNumber(keyList.get(i).label.toString())) {
newkeyList.add(keyList.get(i));
}
}
// 数组长度
int count = newkeyList.size();
// 结果集
List<KeyModel> resultList = new ArrayList<KeyModel>();
// 用一个LinkedList作为中介
LinkedList<KeyModel> temp = new LinkedList<KeyModel>();
// 初始化temp
for (int i = 0; i < count; i++) {
temp.add(new KeyModel(48 + i, i + ""));
}
// 取数
Random rand = new Random();
for (int i = 0; i < count; i++) {
int num = rand.nextInt(count - i);
resultList.add(new KeyModel(temp.get(num).getCode(),
temp.get(num).getLable()));
temp.remove(num);
}
for (int i = 0; i < newkeyList.size(); i++) {
newkeyList.get(i).label = resultList.get(i).getLable();
newkeyList.get(i).codes[0] = resultList.get(i)
.getCode();
}
keyboardView.setKeyboard(keyDig);
}
private void randomalpkey(){
List<Key> keyList = keyAlp.getKeys();
// 查找出a-z的数字键
List<Key> newkeyList = new ArrayList<Key>();
for (int i = 0; i < keyList.size(); i++) {
if (keyList.get(i).label != null
&& isword(keyList.get(i).label.toString())) {
newkeyList.add(keyList.get(i));
}
}
// 数组长度
int count = newkeyList.size();
// 结果集
List<KeyModel> resultList = new ArrayList<KeyModel>();
// 用一个LinkedList作为中介
LinkedList<KeyModel> temp = new LinkedList<KeyModel>();
// 初始化temp
for (int i = 0; i < count; i++) {
temp.add(new KeyModel(97 + i, "" + (char) (97 + i)));
}
// 取数
Random rand = new Random();
for (int i = 0; i < count; i++) {
int num = rand.nextInt(count - i);
resultList.add(new KeyModel(temp.get(num).getCode(),
temp.get(num).getLable()));
temp.remove(num);
}
for (int i = 0; i < newkeyList.size(); i++) {
newkeyList.get(i).label = resultList.get(i).getLable();
newkeyList.get(i).codes[0] = resultList.get(i)
.getCode();
}
keyboardView.setKeyboard(keyAlp);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
android 弹出随机软键盘
共70个文件
png:30个
class:15个
xml:9个
5星 · 超过95%的资源 需积分: 9 12 下载量 175 浏览量
2014-12-01
17:06:57
上传
评论 1
收藏 125KB RAR 举报
温馨提示
不知道那位高人写的 想存着自己用 想了半天没啥好办法 就仍这里吧。android 自定义软键盘 随机按键。
资源推荐
资源详情
资源评论
收起资源包目录
keydemo.rar (70个子文件)
keydemo
.project 843B
bin
keydemo.apk 42KB
AndroidManifest.xml 726B
jarlist.cache 119B
dexedLibs
annotations-93db9d7c5a23675e9cacc11b7fe01f90.jar 943B
annotations-e51552d4fbe0d7bd5d4bb1349e013f21.jar 943B
res
drawable-ldpi
ic_launcher.png 2KB
drawable-hdpi
sym_keyboard_space.png 450B
ic_launcher.png 4KB
sym_keyboard_shift.png 1KB
sym_keyboard_done.png 679B
sym_keyboard_search.png 1KB
ic_dialog_keyboard.png 491B
sym_keyboard_right.PNG 1023B
sym_keyboard_left.PNG 1KB
icon.png 3KB
keyboard_backspace.png 667B
sym_keyboard_delete.png 376B
drawable
normal_key_hl_bg.9.png 685B
normal_key_bg.9.png 761B
drawable-mdpi
ic_launcher.png 2KB
resources.ap_ 32KB
classes
cn
key
R$string.class 391B
KeydemoActivity$1.class 1KB
R$layout.class 358B
R$dimen.class 361B
R$drawable.class 894B
R.class 551B
KeyboardUtil$1.class 3KB
R$xml.class 382B
R$color.class 2KB
KeyModel.class 854B
BuildConfig.class 321B
R$attr.class 304B
KeyboardUtil.class 6KB
KeydemoActivity.class 2KB
R$id.class 383B
classes.dex 16KB
proguard.cfg 1KB
.settings
org.eclipse.core.resources.prefs 57B
AndroidManifest.xml 726B
src
cn
key
KeyModel.java 436B
KeyboardUtil.java 6KB
KeydemoActivity.java 1KB
project.properties 360B
res
values
colors.xml 3KB
strings.xml 180B
dimens.xml 111B
layout
main.xml 1KB
xml
qwerty.xml 3KB
symbols.xml 1KB
drawable-ldpi
ic_launcher.png 2KB
drawable-hdpi
sym_keyboard_space.png 450B
ic_launcher.png 4KB
sym_keyboard_shift.png 1KB
sym_keyboard_done.png 771B
sym_keyboard_search.png 1KB
ic_dialog_keyboard.png 528B
sym_keyboard_right.PNG 914B
sym_keyboard_left.PNG 919B
icon.png 3KB
keyboard_backspace.png 667B
sym_keyboard_delete.png 465B
drawable
normal_key_hl_bg.9.png 960B
btn_keyboard_key.xml 271B
normal_key_bg.9.png 994B
drawable-mdpi
ic_launcher.png 3KB
.classpath 459B
gen
cn
key
R.java 5KB
BuildConfig.java 148B
assets
共 70 条
- 1
资源评论
- 没有马甲2015-03-20果然是高手,学习了
- 萌化小强2015-11-04正好做到这个东西,看了代码是个不错的参考,真是谢谢
bao66372417
- 粉丝: 3
- 资源: 13
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功