Android_开发_Day24_PIN解锁

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的文件读写操作,还有一个事件监听,最后就是一个界面跳转,其余的都是很基础的包括字符相等的判断,条件判断。

实际使用效果:

Android_开发_Day24_PIN解锁_第1张图片
输入密码.jpg
Android_开发_Day24_PIN解锁_第2张图片
密码错误.jpg
Android_开发_Day24_PIN解锁_第3张图片
密码正确.jpg
Android_开发_Day24_PIN解锁_第4张图片
跳转到第二个界面.jpg

总结:

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

你可能感兴趣的:(Android_开发_Day24_PIN解锁)