点击手机防盗 在界面跳转之前 弹出一个对话框dialog
1 dialog的自定义布局
首先如图所示自定义一个布局
然后塞入dialog中代码如下
private void showPasswordInputDialog() {
AlertDialog.Builder builder=new AlertDialog.Builder(this);
final AlertDialog dialog=builder.create();
View view=View.inflate(this,R.layout.dialog_input_password,null);
//dialog.setView(view); //强自定义的布局文件设置给dialog
dialog.setView(view,0,0,0,0);//设置边距为0,保证在低版本上运行没有问题
Button btnOK= (Button) view.findViewById(R.id.btn_OK);
Button btnCancel= (Button) view.findViewById(R.id.btn_cancel);
final EditText etPassword= (EditText) view.findViewById(R.id.et_password);
btnOK.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String password=etPassword.getText().toString();
if(!TextUtils.isEmpty(password)){
String savedPassword=mPref.getString("password", null);
if(password.equals(savedPassword)){
Toast.makeText(HomeActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
dialog.dismiss();
}else{
Toast.makeText(HomeActivity.this, "密码错误", Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(HomeActivity.this, "请输入密码", Toast.LENGTH_SHORT).show();
}
}
});
btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();//隐藏dialog
}
});
dialog.show();
}
通过
View view=View.inflate(this,R.layout.dialog_input_password,null);
dialog.setView(view,0,0,0,0);
给dialog自定义view
view 后面四个参数分别是dialog后面的黑边厚度为0
当然dialog中填入了view 所以view中的button初始化就需要
Button btnOK=(。。。)view.findViewById(R.id.btn_OK);
2 密码的校验
在跳转之前有一个是否有密码存在的判定 如下
/*
显示密码弹窗
*/
private void showPasswordDialog() {
//判断是否设置密码
String savedPassword=mPref.getString("password", null);
if(!TextUtils.isEmpty(savedPassword)){
showPasswordInputDialog();
}else{
//如果没有设置过,弹出设置密码的弹窗
showPasswordSetDialog();
}
}
当没有密码存在的时候跳转到密码设置页面
/*
* 设置密码的弹窗
* */
private void showPasswordSetDialog() {
AlertDialog.Builder builder=new AlertDialog.Builder(this);
final AlertDialog dialog=builder.create();
View view=View.inflate(this,R.layout.dialog_set_password,null);
//dialog.setView(view); //强自定义的布局文件设置给dialog
dialog.setView(view,0,0,0,0);//设置边距为0,保证在低版本上运行没有问题
Button btnOK= (Button) view.findViewById(R.id.btn_OK);
Button btnCancel= (Button) view.findViewById(R.id.btn_cancel);
final EditText etPassword= (EditText) view.findViewById(R.id.et_password);
final EditText etPasswordConfirm= (EditText) view.findViewById(R.id.et_password_confirm);
btnOK.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//当用户点击确定
String password=etPassword.getText().toString();
String passwordConfirm=etPasswordConfirm.getText().toString();
if(!TextUtils.isEmpty(password)&&!passwordConfirm.isEmpty()){
//判断是否为空串
if(password.equals(passwordConfirm)){
Toast.makeText(HomeActivity.this, "登陆成功!", Toast.LENGTH_SHORT).show();
mPref.edit().putString("password",password).commit();
dialog.dismiss();
}else{
Toast.makeText(HomeActivity.this, "两次密码不一致!", Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(HomeActivity.this, "请输入密码!", Toast.LENGTH_SHORT).show();
}
}
});
btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();//隐藏dialog
}
});
dialog.show();
}
这里面就非常清楚的显示第一次密码的写入
当两个密码长度不为空且相同的时候就保存密码到SharePerference中
调用此方法提交
mPref.edit().putString("password",password).commit();
把password中的内容提交到key为“password”
所以取出来就是
String savedPassword=mPref.getString("password", null);
这里判断文本是否为空使用的是
TextUtils.isEmpty(savedPassword)
比较简单的一课!