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;// 数字键盘
private Keyboard keyPun;// 标点键盘
public boolean isnun = false;// 是否数字键盘
public boolean isInterpunction = 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);
keyPun = new Keyboard(mContext, R.xml.interpunction);
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;
isInterpunction = false;
randomalpkey();
} else {
isnun = true;
randomdigkey();
}
} else if (primaryCode == Keyboard.KEYCODE_DONE)// 标点符号键换切
{
if (isInterpunction) {
isInterpunction = false;
randomalpkey();
} else {
isInterpunction = true;
randomInterpunctionkey();
}
} 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 isInterpunction(String str) {
String wordstr = "!\"#$%&()*+-\\/:;<=>?`'^_[]{|}~";
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-2; i++) {
temp.add(new KeyModel(48 + i, i + ""));
}
temp.add(new KeyModel(44 , "" + (char)44));
temp.add(new KeyModel(46 , "" + (char)46));
// 取数
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-1; i++) {
temp.add(new KeyModel(97 + i, "" + (char) (97 + i)));
}
temp.add(new KeyModel(64, "" + (char) 64));//.
// 取数
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);
}
/**
* 标点符号键盘-随机
*/
private void randomInterpunctionkey() {
List<Key> keyList = keyPun.getKeys();
// 查找出标点符号的数字键
List<Key> newkeyList = new ArrayList<Key>();
for (int i = 0; i < keyList.size(); i++) {
if (keyList.get(i).label != null
&& isInterpunction(keyList.get(i).label.toString())) {
newkeyList.add(keyList.get(i));
}
}
// 数组长度
int count = newkeyList.size();
// 结果集
List<KeyModel> resultList = new ArrayList<KeyModel>();
// 用一个LinkedList作为中介
LinkedList<KeyModel> temp =
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
keydemo.zip (50个子文件)
keydemo
.project 843B
bin
AndroidManifest.xml 726B
res
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 419B
R$color.class 2KB
KeyModel.class 854B
BuildConfig.class 321B
R$attr.class 304B
KeyboardUtil.class 8KB
KeydemoActivity.class 2KB
R$id.class 383B
proguard.cfg 1KB
.settings
org.eclipse.core.resources.prefs 57B
AndroidManifest.xml 726B
src
cn
key
KeyModel.java 436B
KeyboardUtil.java 10KB
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
interpunction.xml 3KB
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
drawable-xhdpi
.classpath 475B
gen
cn
key
R.java 5KB
BuildConfig.java 148B
assets
共 50 条
- 1
都市外地娃
- 粉丝: 2
- 资源: 25
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页