Android Studio学习笔记(八)

登录界面

先设置密码登录与验证码登录两个选项,用两边各一个1重量的view达到居中的效果,参考:

http://t.csdn.cn/iMs5T

*已弃用

java设置字体大小

setTextsize默认sp单位,输入纯数字,源码

public void setTextSize(float size) {setTextSize(TypedValue.COMPLEX_UNIT_SP, size);

要输入dp单位需要改为bt_forgetpassword.setTextSize(TypedValue.COMPLEX_UNIT_DIP,10);

参考:https://www.cnblogs.com/duanweishi/p/4449588.html

java转变输入框输入格式

setInputType(int type):

setInputType(InputType.TYPE_CLASS_NUMBER) 改为数字输入

注意:通过代码给InputType赋值时,不是设置TYPE_XXX_VARIATION_YYY,而是要设置TYPE_CLASS_XXX | TYPE_XXXX_VARAITION_YYY

setRawInputType(int type):改变键盘的显示,比如数字键盘,字符键盘,但是这个方法不改变你原有的设置的字符限制。

参考:https://www.lmlphp.com/user/57942/article/item/625968/

是否显示部件

setVisibility(View.VISIBLE) 显示

setVisibility(View.INVISIBLE) 隐藏

setVisibility(View.GONE) 消失

xml控件的命名:https://blog.csdn.net/qq_51985653/article/details/113741561

改变按钮无法点击时的背景颜色

android:backgroundTint="@color/teal_700"
bt_login.setBackgroundTintList(ContextCompat.getColorStateList(this,R.color.teal_700));

监控两个输入框,当都不为空时按钮亮起(TextWatcher)

单选按钮

    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
        switch (checkedId){
            //选择密码登录
            case R.id.rb_password:
                et_password2.setText("");
                tv_password.setText("密    码:");
                et_password2.setHint("请输入密码");
                bt_forgetpassword.setText("忘记密码");
                bt_forgetpassword.setTextSize(TypedValue.COMPLEX_UNIT_DIP,10);
                et_password2.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD);
                ck_remember.setVisibility(View.VISIBLE);
                break;
            //选择验证码登录
            case R.id.rb_verifycode:
                et_password2.setText("");
                tv_password.setText("验证码:");
                et_password2.setHint("请输入验证码");
                bt_forgetpassword.setText("获得验证码");
                bt_forgetpassword.setTextSize(8);
                et_password2.setInputType(InputType.TYPE_CLASS_NUMBER);
                ck_remember.setVisibility(View.INVISIBLE);
                break;
        }
    }

对三个按钮的设置

@Override
    public void onClick(View v) {
        String phone = et_phone.getText().toString();
        if(phone.length()!=11) {
            Toast.makeText(this, "请输入正确的手机号", Toast.LENGTH_LONG).show();
            return;
        }
        switch (v.getId()) {
            case R.id.bt_login:
                playSound(1);
                if(rb_password.isChecked()){
                    if(!mPassword.equals(et_password2.getText().toString())){
                        Toast.makeText(this,"用户名或密码错误",Toast.LENGTH_LONG).show();
                        et_password2.setText("");
                        return;
                    }
                    //成功登录
                    else{
                        loginSuccess();
                        Toast.makeText(this,"登录成功",Toast.LENGTH_LONG).show();
                    }

                } else if (rb_verifycode.isChecked()) {
                    if (verifycode_isclick){
                        if (!verifyCode.equals(et_password2.getText().toString())) {
                            Toast.makeText(this, "验证码错误", Toast.LENGTH_LONG).show();
                            et_password2.setText("");
                            return;
                        } else {
                            loginSuccess();
                            Toast.makeText(this, "登录成功", Toast.LENGTH_LONG).show();
                        }
                    }
                    else {
                        Toast.makeText(this,"请获取验证码",Toast.LENGTH_LONG).show();
                    }
                }
                break;
            case R.id.bt_forgetpassword:
                playSound(2);
                if (rb_password.isChecked()) {
                    //携带手机号码跳转找回密码界面
                    Intent intent = new Intent(this, LoginForgetActivity.class);
                    intent.putExtra("phone", phone);
                    register.launch(intent);
                } else if (rb_verifycode.isChecked()) {
                    //生成六位验证码
                    verifycode_isclick = true;
                    verifyCode = String.format("%04d", new Random().nextInt(9999));
                    AlertDialog.Builder builder = new AlertDialog.Builder(this);
                    builder.setTitle("请记住验证码");
                    builder.setMessage("手机号" + phone + ",本次验证码是" + verifyCode + ",请输入验证码");
                    builder.setPositiveButton("好的", null);
                    AlertDialog dialog = builder.create();
                    dialog.show();
                }
                break;
        }

    }

registerForActivityResult()方法的简单理解和使用

https://blog.csdn.net/weixin_50822129/article/details/127644130

把另一个页面的数据传到本页面上

本页面:

register = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
            @Override
            public void onActivityResult(ActivityResult result) {
                if(result.getResultCode() == Activity.RESULT_OK) {
                    mPassword = result.getData().getStringExtra("newpassword");
                }
            }
        });
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.bt_forgetpassword:
                if (rb_password.isChecked()) {
                    //携带手机号码跳转找回密码界面
                    Intent intent = new Intent(this, LoginForgetActivity.class);
                    intent.putExtra("phone", phone);
                    register.launch(intent);
                    }
        break;
     }
}

另一个页面

phone = getIntent().getStringExtra("phone");
switch (v.getId()){
case R.id.bt_newpassword:
if(verifycode_isclick) {
                    if(verifyCode.equals(et_verifycode.getText().toString())) {
                        Intent intent = new Intent(this, LoginMainActivity.class);
                        intent.putExtra("newpassword",newpassword);
                        setResult(RESULT_OK,intent);
                        finish();
                    }
break;
}

提示窗口

登录成功,弹框,跳转

private void loginSuccess() {
        String desc = String.format("用户%s,欢迎回来",et_phone.getText().toString());
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle(desc);
        builder.setPositiveButton("确定", (dialog, which) -> {
            Intent intent = new Intent(this,DatePick.class);
            startActivity(intent);
        });
        AlertDialog dialog = builder.create();
        dialog.show();
    }

另一个页面

package com.example.chapter05;

import...

public class LoginForgetActivity extends AppCompatActivity implements View.OnClickListener, View.OnFocusChangeListener {


    private EditText et_newpassword;
    private EditText et_newpassword2;
    private EditText et_verifycode;
    private Button bt_verifycode;
    private Button bt_newpassword;
    private boolean verifycode_isclick;
    private String verifyCode;
    private String phone;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login_forget);
        //从上个页面获得手机号
        phone = getIntent().getStringExtra("phone");
        et_newpassword = findViewById(R.id.et_newpassword);
        et_newpassword2 = findViewById(R.id.et_newpassword2);
        et_verifycode = findViewById(R.id.et_verifycode);
        bt_verifycode = findViewById(R.id.bt_verifycode);
        bt_newpassword = findViewById(R.id.bt_newpassword);
        bt_verifycode.setOnClickListener(this);
        bt_newpassword.setOnClickListener(this);
        et_newpassword.setOnFocusChangeListener(this);
        et_newpassword2.setOnFocusChangeListener(this);
        et_verifycode.setOnFocusChangeListener(this);
        verifycode_isclick = false;

        TextWatcher textWatcher = new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                bt_newpassword.setEnabled(!TextUtils.isEmpty(et_newpassword.getText())&&!TextUtils.isEmpty(et_newpassword2.getText())&&!TextUtils.isEmpty(et_verifycode.getText()));
            }
            @Override
            public void afterTextChanged(Editable s) {
            }
        };
        et_newpassword.addTextChangedListener(textWatcher);
        et_newpassword2.addTextChangedListener(textWatcher);
        et_verifycode.addTextChangedListener(textWatcher);
    }

    @Override
    public void onClick(View v) {

        switch (v.getId()){
            case R.id.bt_verifycode:
            verifycode_isclick = true;
            verifyCode = String.format("%04d", new Random().nextInt(9999));
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("请记住验证码");
            builder.setMessage("手机号" + phone + ",本次验证码是" + verifyCode + ",请输入验证码");
            builder.setPositiveButton("好的", null);
            AlertDialog dialog = builder.create();
            dialog.show();
            break;
            case R.id.bt_newpassword:
                String newpassword = et_newpassword.getText().toString();
                String newpassword2 = et_newpassword2.getText().toString();
                if(!newpassword.equals(newpassword2)){
                    Toast.makeText(this,"两次输入的密码需一致",Toast.LENGTH_LONG).show();
                    return;
                }
                if(verifycode_isclick) {
                    if(verifyCode.equals(et_verifycode.getText().toString())) {
                        Intent intent = new Intent(this, LoginMainActivity.class);
                        intent.putExtra("newpassword",newpassword);
                        setResult(RESULT_OK,intent);
                        finish();
                    }
                    else Toast.makeText(this,"验证码错误",Toast.LENGTH_LONG).show();
                }
                else Toast.makeText(this,"请发送验证码",Toast.LENGTH_LONG).show();
                break;
        }
    }

    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if(!hasFocus){
            InputMethodManager manager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            if(manager!=null)
                manager.hideSoftInputFromWindow(v.getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);
        }
    }
}

实现记住密码功能

preferences = getSharedPreferences("config", Context.MODE_PRIVATE);

reload();

private void reload() {
        String phone = preferences.getString("phone","");
        String password = preferences.getString("password","");
        Boolean isremember = preferences.getBoolean("isremember",false);
        if(isremember){
            et_phone.setText(phone);
            et_password2.setText(password);
            ck_remember.setChecked(true);
        }
}
private void loginSuccess() {
        String desc = String.format("用户%s,欢迎回来",et_phone.getText().toString());
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle(desc);
        builder.setPositiveButton("确定", (dialog, which) -> {
            Intent intent = new Intent(this,DatePick.class);
            startActivity(intent);
        });
        AlertDialog dialog = builder.create();
        dialog.show();

        if(ck_remember.isChecked()) {
            SharedPreferences.Editor editor = preferences.edit();
            editor.putString("phone",et_phone.getText().toString());
            editor.putString("password",et_password2.getText().toString());
            editor.putBoolean("isremember",ck_remember.isChecked());
            editor.commit();
        }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值