EditText文本输入框
基本属性
监听键盘事件的集中方式
// 1. 当前这个Activity来监听事件
et.setOnEditorActionListener(this);
// 实现接口
public class MainActivity extends AppCompatActivity implements TextView.OnEditorActionListener {
// 键盘被按下的回调事件
@Override
public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
System.out.println("点击了");
return false;
}
}
// 2.创建一个类 管理事件的回调
class aaListener implements TextView.OnEditorActionListener{
@Override
public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
System.out.println("点击了");
return false;
}
}
// 创建对象
aaListener pl = new aaListener();
et.setOnEditorActionListener(pl);
// 匿名对象
et.setOnEditorActionListener(new aaListener());
// 3.创建匿名类对象
et.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
et.getText();
return false;
}
});
// 4.Lambda表达式
et.setOnEditorActionListener((TextView textView, int i, KeyEvent keyEvent) ->{
System.out.println("点击了");
return true;
}
);
// 监听EditText文本内容改变的事件
et.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) {
// 获取目前输入的个数
int len = charSequence.toString().length();
if (len > 6){
// 将最后一个删除掉
// 只要前面6个
et.setText(charSequence.subSequence(0,6));
// 让光标定位到最后
et.setSelection(6);
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
}
PIN解锁demo
- xml搭建界面
- 设置键盘一直显示
密码解锁代码
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.MotionEvent;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView mTextView;
private EditText mEditText;
private String password;
private String firstInput;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取xml的控件
mTextView = findViewById(R.id.tv_alert);
mEditText = findViewById(R.id.et_password);
//获取保存的密码
//获取管理资源对象Resources
Resources res = getResources();
//通过这个对象获取string.xml里面对应的字符串
String fileName = res.getString(R.string.password_file_name);
//获取共享的sp对象:1.文件不存在就创建 2.文件存在就打开
final SharedPreferences sp = getSharedPreferences(fileName, MODE_PRIVATE);
//通过key获取对应的value
password = sp.getString("yx",null);
//显示提示文本
if (password == null){
mTextView.setText("请设置密码");
}else{
mTextView.setText("请输入密码");
}
//监听内容改变的事件
mEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
//获取文本内容
String inputPassword = s.toString();
//判断是不是6个
if (inputPassword.length() == 6){
//判断是不是设置密码
if (password == null){
//设置密码
if (firstInput == null){
//设置密码的第一次输入
firstInput = inputPassword;
//提示确认密码
mTextView.setText("请确认密码");
//清空内容
mEditText.setText("");
}else{
//确认密码
if (firstInput.equals(inputPassword)){
//两次密码一致
mTextView.setText("设置密码成功!");
goToNext();
//保存密码
SharedPreferences.Editor edit = sp.edit();
edit.putString("yx",firstInput);
edit.commit();
}else{
//密码不正确
mTextView.setText("两次密码不一致 请重新设置");
firstInput = null;
mEditText.setText("");
}
}
} else{
//密码设置过了
if(inputPassword.equals(password)){
//密码正确
mTextView.setText("密码正确!");
goToNext();
}else{
//不正确
mTextView.setText("密码错误请重新输入");
//清空
mEditText.setText("");
}
}
}
}
});
}
-
实现界面跳转
1.先创建一个界面
2.代码实现跳转
3.点击屏幕实现返回