0
点赞
收藏
分享

微信扫一扫

Android仿苹果iphone数字锁屏解锁功能


跟着我一起按步骤来做,保证你一学就会。

步骤如下:

一、先自定义一个键盘布局文件:

在项目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;  
new Keyboard(activity, R.xml.number_only);  
        keyboardView = (KeyboardView) myActivity  
                .findViewById(R.id.keyboard_view);  
        keyboardView.setKeyboard(kb_num_only);  
true);  
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) {  
0,  
1);  
"thisPwdText=" + thisPwdText);  
int len = thisPwdText.length();  
if (len <= 3) {  
"");  
                    }  
                }  
else {  
char) primaryCode;  
"thisPwdText=" + thisPwdText);  
int len = thisPwdText.length();  
if (len <= 4) {  
1).setText("*");  
if (len == 4) {  
// 返回值,并清理本次记录,自动进入下次  
4).setText(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() {  
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  
1) {  
new Thread(new Runnable() {  
@Override  
public void run() {  
try {  
100);  
catch (Exception e) {  
                                e.printStackTrace();  
finally {  
                                Message msg = mHandler.obtainMessage();  
                                msg.what = R.id.doSuccess;  
                                mHandler.sendMessage(msg);  
                            }  
                        }  
                    }).start();  
                }  
            }  
        });  
    }  
  
void initData() {  
new KeyboardUtil(SetLockPwdActivity.this);  
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() {  
new Intent(SetLockPwdActivity.this, MainActivity.class);  
        startActivity(mIntent);  
    }  
  
  
public void MyHandle() {  
new Handler() {  
@Override  
public void handleMessage(Message msg) {  
super.handleMessage(msg);  
switch (msg.what) {  
case R.id.doSuccess:  
if (etPwdFour.getText() != null  
1) {  
if (strLockPwdOne != null  
4) {  
                            String strReapt = etPwdText.getText().toString();  
if (strReapt.equals(strLockPwdOne)) {  
this,  
"解锁密码设置成功");  
null;  
else {  
this,  
"解锁密码设置失败");  
                            }  
else {  
                            strLockPwdOne = etPwdText.getText().toString();  
                        }  
"");  
"");  
"");  
"");  
                    }  
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类。

 

 

效果如下:

Android仿苹果iphone数字锁屏解锁功能_Text

举报

相关推荐

0 条评论