Android的学习与实践4 (PIN解锁及其一些技术)

1.收获

一日不写,如隔三秋。虽然才过去没有几天,但是从今天上课的状态来说没有以前好了,也许自己在这段时间里面写的东西太少了,导致想一些东西还要想一些时间,这也这给自己一个警钟,让自己要去多写,光理解是不行的,但是没有理解是更不行的。在今天的课上还好上课的速度比较慢,不然的话就会跟不上节奏。尽管上课是在周六和周天,但是还是要对学过的东西进行熟悉,再写,以及深入理解,只有这样才能达到自己想要的结果。这样也给我们自己一个更大的发挥时间。通过自己思考和编写,才能把一些东西化为自己的东西。加油!

2.技术

(1)EdiText的属性
(2)监听事件的三种方式
(3)addTextChangedListener
(4) 界面的跳转
(5)demo的完整

3.技术的应用与实践

(1)EdiText的属性
EdiText与TextView的区别
EdiText是表示文本输入框,其中可以输入的内容形式有很多种,比如可以输入密码的形式,纯数字的形式等。可以输入一行,可以限制一行输入的个数,每个字符之间的间距等。
TextView是表示文本提示框,就只是输入纯文本,输入的形式不限,经常用来提示用户操作或者是操作的过程。
EdiText的一些属性:

image.png

image.png

(2)监听事件的三种方式
1.创建一个类和他相应的具体的对象

//创建一个类 管理事件的回调
class Listener implements TextView.OnEditorActionListener{

    @Override
    public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
        System.out.println("被点击了");
        return false;
    }
}
 //1.1创建一个类管理事件
        Listener listener=new Listener();
        et.setOnEditorActionListener(listener);

上面的方式也可以简写为下面的方式

et.setOnEditorActionListener(new Listener());

2.匿名类对象

//1.2 匿名类对象
        et.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {

                return false;
            }
        });

3.Lambda表达式

//1.3 Lambda表达式
        et.setOnEditorActionListener((textView,actionId,event)->{
            System.out.println("被点击了");
            return true;
        });

(3)addTextChangedListener
addTextChangedListener他是专门用来监听文本内容改变的时候,就会执行回调方法

 mEditText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//文本内容改变前
//harSequence charSequence:显示的文本内容
  // int i:表示删除或者是增加的位置 相当于数组从零开始
       // int i1 int i2:两者组合为 0 1表示增加  1 0表示删除
            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//文本内容正在改变
            }

            @Override
            public void afterTextChanged(Editable editable) {
//文本内容改变后
                            }
        });
  • (4) 界面的跳转*
    界面的跳转包括向下一个界面跳转,和向上一个界面跳转

在向下一个界面跳转之前我们要创建下一个界面


image.png

向下一个界面跳转


image.png

向上一个界面跳转


image.png

(5)demo的完整
在这个demo中,我们所应用的图片会有重叠,所以就采用了相对布局
在xml里面进行相应的操作

 
    
    
    
    
    

达到的效果


image.png

然后在MainActivity进行相关操作
1.获取xml控件以便于后面进行相关操作

private TextView mTextView;
    private EditText mEditText;
//获取xml的控件
 mTextView=findViewById(R.id.tv_alert);
 mEditText=findViewById(R.id.et_password);

获取保存的密码

//获取管理资源对象Resources
        Resources res=getResources();
        //获取管理资源的string.xml里面对应的字符串
        final String fileName=res.getString(R.string.password_file_name);
        //获取共享的sp对象:1.文件不存在就创建 2.存在就打开
        final SharedPreferences sp=getSharedPreferences(fileName,MODE_PRIVATE);
         //final SharedPreferences sp=getSharedPreferences(String.valueOf(R.string.password_file_name),MODE_PRIVATE);
        //通过key获取对应的value
        password=sp.getString(fileName,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();
                //判断是否为6个
                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(fileName,firstInput);
                                editor.commit();
                                //跳转
                                gotoNext();
                            }else{
                                //两次密码不一致
                                mTextView.setText("两次密码不一致 请重新设置");
                                firstInput=null;
                                mEditText.setText("");
                            }
                        }
                    }else{
                        //密码设置过了
                        if(inputPassword.equals(password)){
                            //密码正确
                            mTextView.setText("密码正确!");
                            //跳转
                            gotoNext();
                        }else{
                            //密码错误
                            mTextView.setText("密码错误 请重新输入");
                            //清空
                            mEditText.setText("");
                        }
                    }
                }
            }
        });

创建界面跳转的函数

  private void gotoNext(){
        //创建一个Intent确定跳转的界面
        //1.显示意图 2.隐式意图
        Intent intent=new Intent(this,secondactivity.class);
        //跳转
        startActivity(intent);
    }

创建下一个界面 (上面已经说明如何创建在这不再说明)
在下一个界面的MainActivity中写上向上一个界面跳转的事件

 @Override
    public boolean onTouchEvent(MotionEvent event) {
        //返回上一个界面
        //回到当前界面
        //结束当前的Activity
        finish();
        return true;
    }

效果:
我已经设置过密码了


image.png

密码正确后跳转的界面


image.png

点击屏幕后,向上一个界面跳转
image.png

你可能感兴趣的:(Android的学习与实践4 (PIN解锁及其一些技术))