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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容

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