美文网首页
Android_开发_Day24_PIN解锁

Android_开发_Day24_PIN解锁

作者: 不要问我问就是百度 | 来源:发表于2019-10-05 12:45 被阅读0次

    Android_开发_Day24_PIN解锁

    目的:

    熟悉EditText的使用,和事件的监听。

    技术:

    <1> EditText:

    EditText是文本编辑框,可用于文本的编辑以及文本的提交等操作,文本编辑框的基本属性和方法如下:

    名称 作用
    background 顾名思义就是编辑框的背景,可以是纯色也可以是图片
    textColor 就是文本颜色
    textSize 文本大小
    hint 文本预先显示的内容,在文本框为空时就会显示
    textColorHint 预先显示的内容,在文本框中的颜色
    inputType 设置编辑框输入的类型
    maxLines 限制最大的输入行数
    letterSpacing 设置字体之间的间隔
    imeOptions 设置提交按钮的样式
    cursorVisible 设置光标是否可见
    maxLength 设置输入字数

    如果要设置单行显示那就需要更改inputType不为none,同时设置maxLines为1即可。

    <2> addTextChangedListener:

    addTextChangedListener方法是EditText监听内容改变的方法,使用时需要一个实现TextWatcher接口的对象来监听,并且实现里面的三个方法beforeTextChanged、onTextChanged、afterTextChanged,这三个方法的意思是文本改变前,文本改变中,文本改变后,其中有三个参数,其意义分别如下:
    beforeTextChanged方法:

    参数名 参数详解
    charSequence 当前显示的文本内容,由于beforeTextChanged是在文本改变之前调用的,因此该文本就是上一次的文本内容
    start 光标所在位置的索引
    count 光标之后的字符个数
    after 将要用来替换的文本的个数,通常是1,因为键盘的输入是一个一个来的

    onTextChanged方法:

    参数名 参数详解
    charSequence 当前显示的文本内容,由于是正在改变的因此会是改变之后的内容
    start 光标所在位置的索引
    before 文本改变之前光标的后面的字符个数
    count 改变文本之后光标的后面的字符的个数

    afterTextChanged方法:

    参数名 参数详解
    editable 由于该类是继承于CharSequence的因此实际上就是一个字符串,就是改变之后的文本的内容
    <3> 界面的跳转:

    界面的跳转需要一个Intent对象,该类的意思是意图,也就是程序的意图主要是用来做界面的跳转,在构造方法中传两个参数一个是this也就是上下文,另一个是要跳转的界面的activity.class,然后调用startActivity(intent)方法传个Intent对象就可以跳转到另一个界面,由于界面的跳转时先前的那个界面不会被销毁,因此返回时会回到先前那个界面,界面在内存中的存放是用栈的形式存放的,即先加载后销毁,但是我们可以手动控制界面的销毁,只要调用finish()就行了,从此可以节省内存空间。

    技术如何使用:

    public class MainActivity extends AppCompatActivity {
    
        private TextView mTextView;
        private EditText mEditText;
        private String password;
        private String fistInput;
    
        @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 res = getResources();//创建一个资源管理器
            final String fileName = res.getString(R.string.password_file_name);//获取资源
            final SharedPreferences sp = getSharedPreferences(fileName,MODE_PRIVATE);
            password = sp.getString("pwd",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 (fistInput == null){
                                fistInput = inputPassword;
                                mTextView.setText("请确认密码");
                                mEditText.setText("");
                            }else {
                                if (fistInput.equals(inputPassword)){
                                    mTextView.setText("密码设置成功");
                                    SharedPreferences.Editor editor = sp.edit();
                                    editor.putString("pwd",fistInput);
                                    editor.commit();
                                }else {
                                    mTextView.setText("两次密码不一致请重新输入");
                                    fistInput = null;
                                    mEditText.setText("");
                                }
                            }
                        }else {
                            if (inputPassword.equals(password)){
                                mTextView.setText("密码正确");
                                //跳转
                                goToNext();
                            }else{
                                mTextView.setText("密码错误请重新输入");
                                mEditText.setText("");
                            }
                        }
                    }
                }
            });
        }
    
        /**
         * 4大组件
         * 1.Activity 界面
         * 2.Service 服务 后台做的事情
         * 3.ContentProvider 内容提供者 不同程序间数据的交互
         * 4.BroadcastReceiver 广播接收者
         */
        //跳转到下一个界面
        private void goToNext(){
            //创建一个Intent确定跳转的界面
            //1.显示意图  2.隐式意图(跳到程序外部的界面就是隐式意图)
            Intent intent = new Intent(this, SecondActivity.class);
            //跳转
            startActivity(intent);
        }
    }
    

    以上是PIN解锁的代码,代码是真的很简单基本思想就是以前C语言写过的密码判断程序,只不过这里加了一个SharedPreferences的文件读写操作,还有一个事件监听,最后就是一个界面跳转,其余的都是很基础的包括字符相等的判断,条件判断。

    实际使用效果:

    输入密码.jpg 密码错误.jpg 密码正确.jpg 跳转到第二个界面.jpg

    总结:

    界面的搭建在安卓中是比较复杂的,但是搭建出来的界面却可以多种多样,合理运用界面跳转和销毁可以给用户一个良好的体验,同时UI也是一个提升用户体验的一大因素,好看的UI能让人从心底里爱上这个软件,总结成一句话UI的华丽与否从一定层面上是可以看出一个人Android开发能力的强弱的。

    相关文章

      网友评论

          本文标题:Android_开发_Day24_PIN解锁

          本文链接:https://www.haomeiwen.com/subject/qcqyyctx.html