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里面进行相应的操作

 <!--添加背景图片-->
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/background"/>
    <!--文本提示框-->
    <TextView
        android:id="@+id/tv_alert"
        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="150dp"
        />
    <!--添加文本输入框-->
    <EditText
        android:id="@+id/et_password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/bg"
        android:layout_centerHorizontal="true"
        android:layout_below="@id/tv_alert"
        android:layout_marginTop="30dp"
        android:paddingLeft="50dp"
        android:textColor="@color/colorGray"
        android:textSize="@dimen/dimen_textView"
        android:inputType="textPassword"
        android:maxLength="6"
        android:maxLines="1"
        android:cursorVisible="false"
        android:letterSpacing="0.6"
        />

达到的效果


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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,161评论 1 32
  • 冲一杯梨膏糖水,瓶子里的梨膏糖竟然都快见底了。用勺子舀一勺梨膏糖,放到水杯里的时候,糖在水里呈现出丝丝缕缕。落到杯...
    在旅途2018阅读 163评论 0 3
  • 也许大多数人或者说几乎所有的人都不曾知道我的存在,我是一条即使和众多同类出现在你们面前,也无法准确辨认出哪条是...
    Miss泡芙柚子阅读 490评论 0 0
  • 1、感谢早上刷牙的时候,就来了送牙膏的人。哈哈,好美妙!谢谢宇宙爸爸心细如发照顾关爱我!谢谢自己的好运气!谢谢自己...
    高贝贝2019阅读 113评论 0 1
  • 儿子掉了一颗牙,儿子理了个发。 女儿自己做饭,炒菜,只有父女两人,却做了六个人的饭。 老公还带了快餐,没想到女儿做...
    三个瓯柑阅读 39评论 0 1