跟着我一起按步骤来做,保证你一学就会。
步骤如下:
一、先自定义一个键盘布局文件:
在项目res/xml目录下新建一个xml文件,比如number_only.xml
- <?xml version="1.0" encoding="utf-8"?>
- <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
- android:horizontalGap="0px"
- android:keyHeight="13%p"
- android:keyWidth="33%p"
- android:verticalGap="0px" >
- <Row>
- <Key
- android:codes="49"
- android:keyLabel="1" />
- <Key
- android:codes="50"
- android:keyLabel="2" />
- <Key
- android:codes="51"
- android:keyLabel="3" />
- </Row>
- <Row>
- <Key
- android:codes="52"
- android:keyLabel="4" />
- <Key
- android:codes="53"
- android:keyLabel="5" />
- <Key
- android:codes="54"
- android:keyLabel="6" />
- </Row>
- <Row>
- <Key
- android:codes="55"
- android:keyLabel="7" />
- <Key
- android:codes="56"
- android:keyLabel="8" />
- <Key
- android:codes="57"
- android:keyLabel="9" />
- </Row>
- <Row>
- <Key
- android:codes="-2"
- android:keyLabel="" />
- <Key
- android:codes="48"
- android:keyLabel="0" />
- <Key
- android:codes="-5"
- android:keyIcon="@drawable/keyboard_delete" />
- </Row>
- </Keyboard>
二、编写一个键盘事件处理的工具类,如KeyboardUtil.java
- import java.util.ArrayList;
- import android.app.Activity;
- import android.inputmethodservice.Keyboard;
- import android.inputmethodservice.KeyboardView;
- import android.inputmethodservice.KeyboardView.OnKeyboardActionListener;
- import android.view.View;
- import android.widget.EditText;
- public class KeyboardUtil {
- private Activity myActivity;
- private KeyboardView keyboardView;
- private Keyboard kb_num_only;
- private ArrayList<EditText> listEd;
- private String thisPwdText = "";
- public KeyboardUtil(Activity activity) {
- this.myActivity = activity;
- kb_num_only = new Keyboard(activity, R.xml.number_only);
- keyboardView = (KeyboardView) myActivity
- .findViewById(R.id.keyboard_view);
- keyboardView.setKeyboard(kb_num_only);
- 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) {
- if (primaryCode == -2) {
- return;
- } else if (primaryCode == Keyboard.KEYCODE_DELETE) {// 回退
- // 删除按钮所做的动作
- if (thisPwdText != null && thisPwdText.length() >= 1) {
- thisPwdText = thisPwdText.substring(0,
- thisPwdText.length() - 1);
- System.out.println("thisPwdText=" + thisPwdText);
- int len = thisPwdText.length();
- if (len <= 3) {
- listEd.get(len).setText("");
- }
- }
- } else {
- thisPwdText = thisPwdText + (char) primaryCode;
- System.out.println("thisPwdText=" + thisPwdText);
- int len = thisPwdText.length();
- if (len <= 4) {
- listEd.get(len - 1).setText("*");
- if (len == 4) {
- // 返回值,并清理本次记录,自动进入下次
- listEd.get(4).setText(thisPwdText);
- thisPwdText = "";
- }
- }
- }
- }
- };
- /**
- * 包括四个密码输入框和一个密码保存框(按此顺序即可)
- *
- * @param etList
- */
- public void setListEditText(ArrayList<EditText> etList) {
- this.listEd = etList;
- }
- // 显示键盘
- 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);
- }
- }
- }
三、新建一个activity窗口类:如SetLockPwdActivity.java
- import java.util.ArrayList;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.text.Editable;
- import android.text.InputType;
- import android.text.TextWatcher;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.EditText;
- public class SetLockPwdActivity extends Activity {
- private View backView;
- private EditText etPwdOne, etPwdTwo, etPwdThree, etPwdFour, etPwdText;
- private KeyboardUtil kbUtil;
- public String strLockPwdOne;
- public String strLockPwdTwo;
- private Handler mHandler;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_set_lock_pwd);
- findView();
- setListener();
- initData();
- }
- void findView() {
- etPwdOne = (EditText) findViewById(R.id.etPwdOne_setLockPwd);
- etPwdTwo = (EditText) findViewById(R.id.etPwdTwo_setLockPwd);
- etPwdThree = (EditText) findViewById(R.id.etPwdThree_setLockPwd);
- etPwdFour = (EditText) findViewById(R.id.etPwdFour_setLockPwd);
- etPwdText = (EditText) findViewById(R.id.etPwdText_setLockPwd);
- }
- void setListener() {
- etPwdText.addTextChangedListener(new TextWatcher() {
- @Override
- public void onTextChanged(CharSequence arg0, int arg1, int arg2,
- int arg3) {
- }
- @Override
- public void beforeTextChanged(CharSequence arg0, int arg1,
- int arg2, int arg3) {
- }
- @Override
- public void afterTextChanged(Editable arg0) {
- if (etPwdFour.getText() != null
- && etPwdFour.getText().toString().length() >= 1) {
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- Thread.sleep(100);
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- Message msg = mHandler.obtainMessage();
- msg.what = R.id.doSuccess;
- mHandler.sendMessage(msg);
- }
- }
- }).start();
- }
- }
- });
- }
- void initData() {
- kbUtil = new KeyboardUtil(SetLockPwdActivity.this);
- ArrayList<EditText> list = new ArrayList<EditText>();
- list.add(etPwdOne);
- list.add(etPwdTwo);
- list.add(etPwdThree);
- list.add(etPwdFour);
- list.add(etPwdText);
- kbUtil.setListEditText(list);
- etPwdOne.setInputType(InputType.TYPE_NULL);
- etPwdTwo.setInputType(InputType.TYPE_NULL);
- etPwdThree.setInputType(InputType.TYPE_NULL);
- etPwdFour.setInputType(InputType.TYPE_NULL);
- MyHandle();
- }
- void backToActivity() {
- Intent mIntent = new Intent(SetLockPwdActivity.this, MainActivity.class);
- startActivity(mIntent);
- }
- public void MyHandle() {
- mHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
- switch (msg.what) {
- case R.id.doSuccess:
- if (etPwdFour.getText() != null
- && etPwdFour.getText().toString().length() >= 1) {
- if (strLockPwdOne != null
- && strLockPwdOne.length() == 4) {
- String strReapt = etPwdText.getText().toString();
- if (strReapt.equals(strLockPwdOne)) {
- Validate.Toast(SetLockPwdActivity.this,
- "解锁密码设置成功");
- strLockPwdOne = null;
- } else {
- Validate.Toast(SetLockPwdActivity.this,
- "解锁密码设置失败");
- }
- } else {
- strLockPwdOne = etPwdText.getText().toString();
- }
- etPwdOne.setText("");
- etPwdTwo.setText("");
- etPwdThree.setText("");
- etPwdFour.setText("");
- }
- break;
- default:
- break;
- }
- }
- };
- }
- }
此activity对应的layout文件:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/black"
- android:orientation="vertical" >
- <LinearLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- android:layout_marginTop="55dp"
- android:orientation="horizontal" >
- <EditText
- android:id="@+id/etPwdOne_setLockPwd"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="@color/white"
- android:cursorVisible="false"
- android:ems="1"
- android:gravity="center"
- android:lines="1"
- android:textSize="31sp" >
- </EditText>
- <EditText
- android:id="@+id/etPwdTwo_setLockPwd"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="16dp"
- android:background="@color/white"
- android:cursorVisible="false"
- android:ems="1"
- android:gravity="center"
- android:textSize="31sp" />
- <EditText
- android:id="@+id/etPwdThree_setLockPwd"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="16dp"
- android:background="@color/white"
- android:cursorVisible="false"
- android:ems="1"
- android:gravity="center"
- android:textSize="31sp" />
- <EditText
- android:id="@+id/etPwdFour_setLockPwd"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="16dp"
- android:background="@color/white"
- android:cursorVisible="false"
- android:ems="1"
- android:gravity="center"
- android:textSize="31sp" />
- <EditText
- android:id="@+id/etPwdText_setLockPwd"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:visibility="gone" />
- </LinearLayout>
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:gravity="center"
- android:orientation="vertical" >
- <android.inputmethodservice.KeyboardView
- android:id="@+id/keyboard_view"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:background="@color/lightblack"
- android:focusable="true"
- android:focusableInTouchMode="true"
- android:keyBackground="@drawable/keyboard_key"
- android:keyTextColor="@color/white" />
- </LinearLayout>
- </LinearLayout>
四、最后一步,别忘了在AndroidManifest.xml配置文件中声明上面的activity类。
效果如下: