android pin快速解锁,【Android开发】PIN解锁|EditText入门

心得感悟

这个Demo的确不难,但让自己写还是不能写出来。因为之前没有学过Android开发的一些方法控件,每次布置的Demo都写不出来,还是挺挫败的。而且因为开学事情有点多,预习任务也没能好好完成,心里有点浮躁,感觉自己落后了很多。希望接下来自己可以静下心跟上进度吧。

内容简概

一、 EditText入门

二、PIN解锁

三、效果预览

具体内容

一、 EditText入门

1.常用属性介绍

EditText(输入框)是一个常用的控件,和TextView的区别在于可以接收用户输入。其常用属性如下:

属性

作用

android:paddingLeft=""

子控件(输入)边距

android:textColor=""

输入文本的颜色

android:textSize=""

输入文本的大小

android:hint=""

提示文本

android:textColorHint=""

提示文本的颜色

android:maxLines=""

输入的最大行数

android:inputType=""

输入内容的类型

android:maxLength=""

输入的最大字符数

android:cursorVisible=""

设置光标是否可见

android:imeOptions=""

设置右下角的按键类型

2.简单例子

下面我们用以上属性做一个简单的界面

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity">

android:id="@+id/et_password"

android:layout_width="match_parent"

android:layout_height="60dp"

android:background="@drawable/bg"

android:layout_marginLeft="50dp"

android:layout_marginRight="50dp"

android:paddingLeft="70dp"

android:textColor="#ffffff"

android:textSize="30sp"

android:hint="请输入密码"

android:textColorHint="#999999"

android:maxLines="1"

android:inputType="textPassword"

android:maxLength="6"

android:cursorVisible="false"

android:imeOptions="actionGo"

/>

public class MainActivity extends AppCompatActivity implements TextView.OnEditorActionListener {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

// 通过id获取xml里对应的控件

EditText et = findViewById(R.id.et_password);

// 当前这个activity来监听事件

et.setOnEditorActionListener(new TextView.OnEditorActionListener() {

@Override

public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {

et.getText();

return false;

}

});

et.addTextChangedListener(new TextWatcher() {

@Override

public void beforeTextChanged(CharSequence charSequence, int start, int before, int count) {

}

/**

* CharSequence:显示的文本内容

* int start(i):0

* int before(i2):改变前字符数

* int count(i3):改变后字符数

*

* 限制输入个数为3个

*/

@Override

public void onTextChanged(CharSequence charSequence, int start, int before, int count) {

// 获取目前输入的个数

int len = charSequence.toString().length();

if (len > 6){

// 将最后一个删除

// 只要前面6 个

et.setText(charSequence.subSequence(1,6));

// 让光标定位到最后

et.setSelection(6);

}

}

@Override

public void afterTextChanged(Editable editable) {

}

});

}

// 监听键盘被按下的回调事件

@Override

public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {

System.out.println("点击了");

return false;

}

}

由于密码保护,无法录制动态效果图,所以采用截图。

(1)没输入文本前:输入框有提示文本:“请输入密码”,光标被隐藏。

(2)输入任意文本后:提示消失,密码短暂时间显示内容,然后隐藏(变成圆点)。

(3)继续输入文本:最多只能输入6个字符。

5510c556bf62

这只是一个简单的例子,下面做一个更高阶一点的应用。

二、PIN解锁

1.主界面的xml文件

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity">

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@drawable/main_bg" />

android:id="@+id/tv_alert"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="请设置密码"

android:textSize="@dimen/dimen_alert"

android:textColor="@color/colorGrey"

android:textAlignment="center"

android:layout_marginTop="80dp"/>

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="70dp"

android:textColor="@color/colorGrey"

android:textSize="@dimen/dimen_textView"

android:inputType="textPassword"

android:maxLength="6"

android:maxLines="1"

android:cursorVisible="false"

android:letterSpacing="0.5" />

2.主界面Java代码

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;

import android.content.SharedPreferences;

import android.content.res.Resources;

import android.os.Bundle;

import android.text.Editable;

import android.text.TextWatcher;

import android.widget.EditText;

import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

private TextView mTextView;

private EditText mEditText;

private String password;

private String firstInput;

@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

Resources res = getResources();

// 通过这个对象获取String.xml里面对应的字符串

String fileName = res.getString(R.string.password_file_name);

// 获取共享的sp对象:1.文件不存在就创建 2.文件存在就打开

final SharedPreferences sp = getSharedPreferences(fileName,MODE_PRIVATE);

// 通过key获取对应的value

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();

// 判断是不是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 edit = sp.edit();

edit.putString("pwd",firstInput);

edit.commit();

// 跳转

goToNext();

}else {

// 密码不正确

mTextView.setText("两次密码不一致 请重新设置");

firstInput = null;

mEditText.setText("");

}

}

}else{

// 密码设置过了

if (inputPassword.equals(password)){

// 密码正确

mTextView.setText("密码正确!");

// 跳转

goToNext();

}else {

// 不正确

mTextView.setText("密码错误请重新输入");

// 清空

mEditText.setText("");

}

}

}

}

});

}

/**

* 跳转到下一个界面

* 四大组件

* 1.activity 界面

* 2.service 服务 后台做的事

* 3.contentProvider 内容提供者 不同程序间数据交互

* 4.broadcastReceiver 广播接收者 (通知)

*

* Intent 作为数据传递

* Intent:意图 (跳到哪个界面,要不要带数据)

*/

private void goToNext(){

// 创建一个Intent确定跳转的界面

// 1.显示意图 2.隐示意图 (系统界面)

Intent intent = new Intent(this,SecondActivity.class);

// 跳转

startActivity(intent);

}

}

3.跳转页面的xml文件

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".SecondActivity"

android:background="@drawable/pic">

4.跳转页面的Java代码

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.view.MotionEvent;

public class SecondActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_second);

}

@Override

public boolean onTouchEvent(MotionEvent event) {

// 返回上一个界面(删除当前界面)

// 结束当前的activity

finish();

return true;

}

}

5.添加跳转页面

找到value,鼠标右击,按图中顺序操作完成创建。

5510c556bf62

5510c556bf62

6.添加自定义控件strings

同样找到value,鼠标右击,按图中顺序操作完成创建。

5510c556bf62

5510c556bf62

三、效果预览

由于密码的保护机制,输入密码时录屏软件无法正常录制,只能放一个结尾的动图以及各部分截图。

5510c556bf62

密码正确,跳转至另一个页面

顺序:第一次设置密码→两次输入不一致→设置密码成功→第二次登陆输入密码错误→输入密码正确

5510c556bf62

第一次设置密码

5510c556bf62

密码不一致→设置成功

5510c556bf62

第二次登陆密码输入错误

5510c556bf62

第二次登陆密码输入正确→跳转至另一个页面

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值