1.收获
一日不写,如隔三秋。虽然才过去没有几天,但是从今天上课的状态来说没有以前好了,也许自己在这段时间里面写的东西太少了,导致想一些东西还要想一些时间,这也这给自己一个警钟,让自己要去多写,光理解是不行的,但是没有理解是更不行的。在今天的课上还好上课的速度比较慢,不然的话就会跟不上节奏。尽管上课是在周六和周天,但是还是要对学过的东西进行熟悉,再写,以及深入理解,只有这样才能达到自己想要的结果。这样也给我们自己一个更大的发挥时间。通过自己思考和编写,才能把一些东西化为自己的东西。加油!
2.技术
(1)EdiText的属性
(2)监听事件的三种方式
(3)addTextChangedListener
(4) 界面的跳转
(5)demo的完整
3.技术的应用与实践
(1)EdiText的属性
EdiText与TextView的区别
EdiText是表示文本输入框,其中可以输入的内容形式有很多种,比如可以输入密码的形式,纯数字的形式等。可以输入一行,可以限制一行输入的个数,每个字符之间的间距等。
TextView是表示文本提示框,就只是输入纯文本,输入的形式不限,经常用来提示用户操作或者是操作的过程。
EdiText的一些属性:
(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) 界面的跳转*
界面的跳转包括向下一个界面跳转,和向上一个界面跳转
在向下一个界面跳转之前我们要创建下一个界面
向下一个界面跳转
向上一个界面跳转
(5)demo的完整
在这个demo中,我们所应用的图片会有重叠,所以就采用了相对布局
在xml里面进行相应的操作
达到的效果
然后在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;
}
效果:
我已经设置过密码了
密码正确后跳转的界面
点击屏幕后,向上一个界面跳转