1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > android自定义金额输入键盘_Android自定义软键盘的实现

android自定义金额输入键盘_Android自定义软键盘的实现

时间:2019-02-16 23:06:25

相关推荐

android自定义金额输入键盘_Android自定义软键盘的实现

先看界面布局文件

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical">

android:id="@+id/edit"

android:layout_width="fill_parent"

android:layout_height="wrap_content"/>

android:id="@+id/edit1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:password="true"/>

android:layout_width="fill_parent"

android:layout_height="wrap_content">

android:id="@+id/keyboard_view"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

android:focusable="true"

android:focusableInTouchMode="true"

android:background="@color/lightblack"

android:keyBackground="@drawable/btn_keyboard_key"

android:keyTextColor="@color/white"

android:visibility="gone"/>

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

android:id="@+id/edit"

android:layout_width="fill_parent"

android:layout_height="wrap_content" />

android:id="@+id/edit1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:password="true" />

android:layout_width="fill_parent"

android:layout_height="wrap_content" >

android:id="@+id/keyboard_view"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

android:focusable="true"

android:focusableInTouchMode="true"

android:background="@color/lightblack"

android:keyBackground="@drawable/btn_keyboard_key"

android:keyTextColor="@color/white"

android:visibility="gone" />

通过布局文件可以看出界面上有两个输入框,其中一个是密码输入框,界面上还有一个隐藏的键盘控件。在res下新建xml文件夹,在xml文件夹中新建qwerty.xml和symbols.xml文件. qwerty.xml 是字母键盘布局,symbols.xml 是数字键盘布局,内如如下

qwerty.xml内容

android:horizontalGap="0.0px"android:verticalGap="0.0px"

xmlns:android="/apk/res/android">

android:keyLabel="q"/>

android:keyLabel="p"/>

android:keyEdgeFlags="left"android:keyLabel="a"/>

android:keyLabel="l"/>

android:keyEdgeFlags="left"android:isModifier="true"

android:isSticky="true"android:keyIcon="@drawable/sym_keyboard_shift"/>

android:keyEdgeFlags="right"android:isRepeatable="true"

android:keyIcon="@drawable/sym_keyboard_delete"/>

android:keyLabel="12#"/>

android:keyLabel=","/>

android:isRepeatable="true"android:keyIcon="@drawable/sym_keyboard_space"/>

android:keyLabel="."/>

android:keyEdgeFlags="right"android:keyLabel="完成"/>

android:horizontalGap="0.0px" android:verticalGap="0.0px"

xmlns:android="/apk/res/android">

android:keyLabel="q" />

android:keyLabel="p" />

android:keyEdgeFlags="left" android:keyLabel="a" />

android:keyLabel="l" />

android:keyEdgeFlags="left" android:isModifier="true"

android:isSticky="true" android:keyIcon="@drawable/sym_keyboard_shift" />

android:keyEdgeFlags="right" android:isRepeatable="true"

android:keyIcon="@drawable/sym_keyboard_delete" />

android:keyLabel="12#" />

android:keyLabel="," />

android:isRepeatable="true" android:keyIcon="@drawable/sym_keyboard_space" />

android:keyLabel="." />

android:keyEdgeFlags="right" android:keyLabel="完成" />

symbols.xml 内容

android:keyWidth="25%p"android:horizontalGap="0px"

android:verticalGap="0px"android:keyHeight="@dimen/key_height">

android:keyIcon="@drawable/sym_keyboard_left"/>

android:keyIcon="@drawable/sym_keyboard_right"/>

android:keyEdgeFlags="right"android:isRepeatable="true"

android:keyLabel="完成"/>

android:keyWidth="25%p" android:horizontalGap="0px"

android:verticalGap="0px" android:keyHeight="@dimen/key_height">

android:keyIcon="@drawable/sym_keyboard_left" />

android:keyIcon="@drawable/sym_keyboard_right" />

android:keyEdgeFlags="right" android:isRepeatable="true"

android:keyLabel="完成" />

KeydemoActivity.java

packagecn.key;

importandroid.app.Activity;

importandroid.content.Context;

importandroid.os.Bundle;

importandroid.text.InputType;

importandroid.view.MotionEvent;

importandroid.view.View;

importandroid.view.View.OnTouchListener;

importandroid.widget.EditText;

publicclassKeydemoActivityextendsActivity{

privateContextctx;

privateActivityact;

privateEditTextedit;

privateEditTextedit1;

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

ctx=this;

act=this;

edit=(EditText)this.findViewById(R.id.edit);

edit.setInputType(InputType.TYPE_NULL);

edit1=(EditText)this.findViewById(R.id.edit1);

edit.setOnTouchListener(newOnTouchListener(){

@Override

publicbooleanonTouch(Viewv,MotionEventevent){

newKeyboardUtil(act,ctx,edit).showKeyboard();

returnfalse;

}

});

edit1.setOnTouchListener(newOnTouchListener(){

@Override

publicbooleanonTouch(Viewv,MotionEventevent){

intinputback=edit1.getInputType();

edit1.setInputType(InputType.TYPE_NULL);

newKeyboardUtil(act,ctx,edit1).showKeyboard();

edit1.setInputType(inputback);

returnfalse;

}

});

}

}

package cn.key;

import android.app.Activity;

import android.content.Context;

import android.os.Bundle;

import android.text.InputType;

import android.view.MotionEvent;

import android.view.View;

import android.view.View.OnTouchListener;

import android.widget.EditText;

public class KeydemoActivity extends Activity {

private Context ctx;

private Activity act;

private EditText edit;

private EditText edit1;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

ctx = this;

act = this;

edit = (EditText) this.findViewById(R.id.edit);

edit.setInputType(InputType.TYPE_NULL);

edit1 = (EditText) this.findViewById(R.id.edit1);

edit.setOnTouchListener(new OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

new KeyboardUtil(act, ctx, edit).showKeyboard();

return false;

}

});

edit1.setOnTouchListener(new OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

int inputback = edit1.getInputType();

edit1.setInputType(InputType.TYPE_NULL);

new KeyboardUtil(act, ctx, edit1).showKeyboard();

edit1.setInputType(inputback);

return false;

}

});

}

}

KeyboardUtil.java

packagecn.key;

importjava.util.List;

importandroid.app.Activity;

importandroid.content.Context;

importandroid.inputmethodservice.Keyboard;

importandroid.inputmethodservice.KeyboardView;

importandroid.inputmethodservice.Keyboard.Key;

importandroid.inputmethodservice.KeyboardView.OnKeyboardActionListener;

importandroid.text.Editable;

importandroid.view.View;

importandroid.widget.EditText;

publicclassKeyboardUtil{

privateContextctx;

privateActivityact;

privateKeyboardViewkeyboardView;

privateKeyboardk1;//字母键盘

privateKeyboardk2;//数字键盘

publicbooleanisnun=false;//是否数据键盘

publicbooleanisupper=false;//是否大写

privateEditTexted;

publicKeyboardUtil(Activityact,Contextctx,EditTextedit){

this.act=act;

this.ctx=ctx;

this.ed=edit;

k1=newKeyboard(ctx,R.xml.qwerty);

k2=newKeyboard(ctx,R.xml.symbols);

keyboardView=(KeyboardView)act.findViewById(R.id.keyboard_view);

keyboardView.setKeyboard(k1);

keyboardView.setEnabled(true);

keyboardView.setPreviewEnabled(true);

keyboardView.setOnKeyboardActionListener(listener);

}

privateOnKeyboardActionListenerlistener=newOnKeyboardActionListener(){

@Override

publicvoidswipeUp(){

}

@Override

publicvoidswipeRight(){

}

@Override

publicvoidswipeLeft(){

}

@Override

publicvoidswipeDown(){

}

@Override

publicvoidonText(CharSequencetext){

}

@Override

publicvoidonRelease(intprimaryCode){

}

@Override

publicvoidonPress(intprimaryCode){

}

@Override

publicvoidonKey(intprimaryCode,int[]keyCodes){

Editableeditable=ed.getText();

intstart=ed.getSelectionStart();

if(primaryCode==Keyboard.KEYCODE_CANCEL){//完成

hideKeyboard();

}elseif(primaryCode==Keyboard.KEYCODE_DELETE){//回退

if(editable!=null&&editable.length()>0){

if(start>0){

editable.delete(start-1,start);

}

}

}elseif(primaryCode==Keyboard.KEYCODE_SHIFT){//大小写切换

changeKey();

keyboardView.setKeyboard(k1);

}elseif(primaryCode==Keyboard.KEYCODE_MODE_CHANGE){//数字键盘切换

if(isnun){

isnun=false;

keyboardView.setKeyboard(k1);

}else{

isnun=true;

keyboardView.setKeyboard(k2);

}

}elseif(primaryCode==57419){//goleft

if(start>0){

ed.setSelection(start-1);

}

}elseif(primaryCode==57421){//goright

if(start

ed.setSelection(start+1);

}

}else{

editable.insert(start,Character.toString((char)primaryCode));

}

}

};

/**

*键盘大小写切换

*/

privatevoidchangeKey(){

Listkeylist=k1.getKeys();

if(isupper){//大写切换小写

isupper=false;

for(Keykey: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(Keykey:keylist){

if(key.label!=null&&isword(key.label.toString())){

key.label=key.label.toString().toUpperCase();

key.codes[0]=key.codes[0]-32;

}

}

}

}

publicvoidshowKeyboard(){

intvisibility=keyboardView.getVisibility();

if(visibility==View.GONE||visibility==View.INVISIBLE){

keyboardView.setVisibility(View.VISIBLE);

}

}

publicvoidhideKeyboard(){

intvisibility=keyboardView.getVisibility();

if(visibility==View.VISIBLE){

keyboardView.setVisibility(View.INVISIBLE);

}

}

privatebooleanisword(Stringstr){

Stringwordstr="abcdefghijklmnopqrstuvwxyz";

if(wordstr.indexOf(str.toLowerCase())>-1){

returntrue;

}

returnfalse;

}

}

package cn.key;

import java.util.List;

import android.app.Activity;

import android.content.Context;

import android.inputmethodservice.Keyboard;

import android.inputmethodservice.KeyboardView;

import android.inputmethodservice.Keyboard.Key;

import android.inputmethodservice.KeyboardView.OnKeyboardActionListener;

import android.text.Editable;

import android.view.View;

import android.widget.EditText;

public class KeyboardUtil {

private Context ctx;

private Activity act;

private KeyboardView keyboardView;

private Keyboard k1;// 字母键盘

private Keyboard k2;// 数字键盘

public boolean isnun = false;// 是否数据键盘

public boolean isupper = false;// 是否大写

private EditText ed;

public KeyboardUtil(Activity act, Context ctx, EditText edit) {

this.act = act;

this.ctx = ctx;

this.ed = edit;

k1 = new Keyboard(ctx, R.xml.qwerty);

k2 = new Keyboard(ctx, R.xml.symbols);

keyboardView = (KeyboardView) act.findViewById(R.id.keyboard_view);

keyboardView.setKeyboard(k1);

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();

} else if (primaryCode == Keyboard.KEYCODE_DELETE) {// 回退

if (editable != null && editable.length() > 0) {

if (start > 0) {

editable.delete(start - 1, start);

}

}

} else if (primaryCode == Keyboard.KEYCODE_SHIFT) {// 大小写切换

changeKey();

keyboardView.setKeyboard(k1);

} else if (primaryCode == Keyboard.KEYCODE_MODE_CHANGE) {// 数字键盘切换

if (isnun) {

isnun = false;

keyboardView.setKeyboard(k1);

} else {

isnun = true;

keyboardView.setKeyboard(k2);

}

} else if (primaryCode == 57419) { // go left

if (start > 0) {

ed.setSelection(start - 1);

}

} else if (primaryCode == 57421) { // go right

if (start < ed.length()) {

ed.setSelection(start + 1);

}

} else {

editable.insert(start, Character.toString((char) primaryCode));

}

}

};

/**

* 键盘大小写切换

*/

private void changeKey() {

List keylist = k1.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 isword(String str){

String wordstr = "abcdefghijklmnopqrstuvwxyz";

if (wordstr.indexOf(str.toLowerCase())>-1) {

return true;

}

return false;

}

}

源码下载地址:/detail/hfsu0419/4534209

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。