简介
本文简单介绍使用EditText实现密码解锁
思路 :
1.使用EditText接收用户输入
2.使用SharedPreference保存数据
3.使用Intent跳转界面
实现
1.在drawable中导入三张图片,在xml文件中配置如下
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/main_bg"/>
<TextView
android:id="@+id/alertText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="请设置密码"
android:textColor="@color/colorGray"
android:textSize="@dimen/dimen_alert"
android:textAlignment="center"
android:layout_marginTop="100dp"
/>
<EditText
android:id="@+id/et_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/unlock_normal"
android:layout_centerHorizontal="true"
android:layout_below="@+id/alertText"
android:layout_marginTop="30dp"
android:paddingLeft="50dp"
android:textSize="@dimen/dimen_textView"
android:inputType="textPassword"
android:cursorVisible="false"
android:letterSpacing="0.6"
/>
</RelativeLayout>
2.配置资源文件中的values
colors.xml中添加如下
<resources>
<color name="colorPrimary">#008577</color>
<color name="colorPrimaryDark">#00574B</color>
<color name="colorAccent">#D81B60</color>
<color name="colorGray">#999999</color>
<color name="colorWhite">#ffffff</color>
</resources>
新建一个dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="dimen_alert">30sp</dimen>
<dimen name="dimen_textView">30sp</dimen>
</resources>
strings.xml中添加如下
<resources>
<string name="app_name">PINUnlock</string>
<string name="password_file_name">pwd</string>
<string name="password_pwd_name">pwd</string>
</resources>
3.在MainActivity中实现
public class MainActivity extends AppCompatActivity {
private TextView mTextView;
private EditText mEditText;
private SharedPreferences sp;
private String password;
private String firstInput;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取xml的控件
mEditText = findViewById(R.id.et_password);
mTextView = findViewById(R.id.alertText);
//获取保存的密码
sp = getSharedPreferences(getResources().getString(R.string.password_file_name),MODE_PRIVATE);
//通过key获取对应的value
password = sp.getString(getResources().getString(R.string.password_pwd_name), null);
//显示提示文本
if (password == null){
mTextView.setText("请设置密码");
}else {
mTextView.setText("请输入密码");
}
//监听内容改变事件
mEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
String inputPassword = editable.toString();
//判断是不是六个
if (inputPassword.length() == 6){
//判断是不是设置密码
if (password == null){
//设置密码
if (firstInput == null){
firstInput = inputPassword;
// 提示确认密码
mTextView.setText("请确认密码");
//清空
mEditText.setText("");
}else {
//确认密码
if (firstInput.equals(inputPassword)){
//两次密码一致
mTextView.setText("密码设置成功");
//保存密码
SharedPreferences.Editor editor = sp.edit();
editor.putString(getResources().getString(R.string.password_pwd_name), firstInput);
editor.commit();
next();
}else {
//设置密码失败
mTextView.setText("两次密码不一致,请重新设置");
firstInput = null;
mEditText.setText("");
}
}
}else {
//密码设置过了
if (inputPassword.equals(password)){
//密码正确
mTextView.setText("密码正确");
//跳转界面
next();
}else {
//密码错误
mTextView.setText("密码错误");
// 清空
mTextView.clearComposingText();
}
}
}
}
});
}
private void next(){
//创建一个Intent确定跳转界面
//1.显式意图 2.隐式意图(系统界面)
Intent intent = new Intent(this,SecondActivity.class);
startActivity(intent);
}
}
4.在当前项目中新建一个activity并新建一个Layout的xml配置文件
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_activity);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
finish();
return true;
}
}
xml文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/yan"/>
</RelativeLayout>
附件材料
main_bg.png
unlock_normal.png
yan.jpg