Android_登录

Android_登录

  • 账号密码长度的监视和校验

    1.我们通过监视账号密码的长度来判断用户输入信息是否合法,可以把登录按钮设为可用或不可用,更直观的就是设置登录按钮是灰色或者是其他颜色.
    2.我们在监视长度后,还可以在焦点状态改变的时候校验用户输入的账号是不是合法.一般我们使用的是手机号的作为账号的话直接可以和用户交互.
    3.一般我们希望可以直接删除输入错误的账号或者密码字符,还有就是密码最好是可以显示和隐藏的.
    
  • 布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:background="#ffffff"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:gravity="center"
        android:padding="20dp"
        android:layout_height="match_parent"
        tools:context="com.demo.aswitch.login.LoginActivity">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_marginTop="30dp"
            android:background="@drawable/yuanjiaojvxing"
            android:orientation="horizontal">
    
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginLeft="10dp"
                android:padding="5dp"
                android:src="@drawable/zy02_user" />
    
            <EditText
                android:id="@+id/username"
                style="@style/login_style"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:hint="手机号"
                android:inputType="phone"
                android:maxLength="11"
                android:singleLine="true" />
    
            <ImageView
                android:id="@+id/acc_del"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:clickable="true"
                android:padding="10dp"
                android:src="@drawable/b_del" />
    
    
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_marginTop="20dp"
            android:background="@drawable/yuanjiaojvxing"
            android:orientation="horizontal">
    
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginLeft="10dp"
                android:padding="5dp"
                android:src="@drawable/zy02_pwd" />
    
            <EditText
                android:id="@+id/password"
                style="@style/login_style"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:hint="登录密码"
                android:inputType="textPassword"
                android:maxLength="12"
                android:singleLine="true" />
    
            <ImageView
                android:id="@+id/pas_del"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:clickable="true"
                android:padding="5dp"
                android:src="@drawable/b_del"
                android:visibility="gone" />
    
            <ImageView
                android:id="@+id/eye"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:clickable="true"
                android:padding="5dp"
                android:src="@drawable/zy02_no" />
        </LinearLayout>
    
        <Button
            android:id="@+id/btn_login"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_marginTop="40dp"
            android:background="#ff0000"
            android:gravity="center"
            android:text="登录"
            android:textColor="#ffffff"
            android:textSize="18sp" />
    </LinearLayout>
    
  • 代码实现

    public class LoginActivity extends AppCompatActivity implements View.OnClickListener {
    
        private EditText username;
        private ImageView acc_del;
        private EditText password;
        private ImageView pas_del;
        private ImageView eye;
        private Button btn_login;
        private boolean beye;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_login);
            initView();
        }
    
        private void initView() {
            username = (EditText) findViewById(R.id.username);
            acc_del = (ImageView) findViewById(R.id.acc_del);
            password = (EditText) findViewById(R.id.password);
            pas_del = (ImageView) findViewById(R.id.pas_del);
            eye = (ImageView) findViewById(R.id.eye);
            btn_login = (Button) findViewById(R.id.btn_login);
    
            acc_del.setOnClickListener(this);
            pas_del.setOnClickListener(this);
            eye.setOnClickListener(this);
            btn_login.setOnClickListener(this);
            //文本监视
            username.addTextChangedListener(new EditChangedListener(username));
            //焦点监视
            username.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                @Override
                public void onFocusChange(View v, boolean hasFocus) {
                    if (hasFocus) {
                        if (TextUtils.isEmpty(password.getText().toString().trim())) {
                            setUsable(false);
                        }
                        if (!TextUtils.isEmpty(username.getText().toString().trim())) {
                            acc_del.setVisibility(View.VISIBLE);
                            pas_del.setVisibility(View.GONE);
                        }
                    }
                }
            });
            //文本监视
            password.addTextChangedListener(new EditChangedListener(password));
            //焦点监视
            password.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                @Override
                public void onFocusChange(View v, boolean hasFocus) {
                    if (hasFocus) {
                        if (!TextUtils.isEmpty(password.getText().toString().trim())) {
                            acc_del.setVisibility(View.GONE);
                            pas_del.setVisibility(View.VISIBLE);
                        }
                        if (TextUtils.isEmpty(username.getText().toString().trim())) {
                            getFocus(username);
                            return;
                        }
    
                    }
                }
            });
            //初始化不可用
            setUsable(false);
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.acc_del:
                    username.setText("");
                    password.setText("");
                    getFocus(username);
                    break;
                case R.id.pas_del:
                    getFocus(password);
                    password.setText("");
                    break;
                case R.id.eye:
                    if (beye) {
                        eye.setImageResource(R.drawable.zy02_no);
                        //变为**
                        password.setTransformationMethod(PasswordTransformationMethod.getInstance());
                    } else {
                        eye.setImageResource(R.drawable.zy02_yes);
                        //显示正常字符
                        password.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                    }
                    //取反赋值
                    beye = !beye;
                    //视图重绘
                    password.postInvalidate();
                    //切换后将EditText光标置于末尾
                    CharSequence charSequence = password.getText();
                    if (charSequence instanceof Spannable) {
                        Spannable spanText = (Spannable) charSequence;
                        Selection.setSelection(spanText, charSequence.length());
                    }
                    break;
                case R.id.btn_login:
    
                    break;
            }
        }
    
      //实现TextWatcher
        class EditChangedListener implements TextWatcher {
            private EditText et;
    
            public EditChangedListener(EditText et) {
                this.et = et;
            }
    
            /**
             * 文本改变之前的状态,将要改变
             *
             * @param s     文本
             * @param start 替换开始位置
             * @param count 要替换的字符数
             * @param after 替换为after个字符
             */
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
                if (s.length() > 0) {
                    acc_del.setVisibility(View.VISIBLE);
                    pas_del.setVisibility(View.GONE);
                }
    
            }
    
            /**
             * 字符改变时的状态
             *
             * @param s      文本
             * @param start  替换开始位置
             * @param before 之前的字符数
             * @param count  添加的字符数 就是你一次输入的字符长度
             */
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                Log.e("main", "onTextChanged---输入字符长度" + count);
                Log.e("main", "onTextChanged---" + s.toString());
            }
    
            /**
             * 字符改变后的状态,最终的文本s
             *
             * @param s
             */
            @Override
            public void afterTextChanged(Editable s) {
                Log.e("main", s.toString());
    
                if (et.getId() == R.id.username && s.length() == 11 && !Validator.isMobile(s.toString())) {
                    Toast.makeText(LoginActivity.this, "手机号格式不正确!", Toast.LENGTH_SHORT).show();
                    getFocus(et);
    
                }
                Log.e("main", "afterTextChanged---最终的字符长度" + s.length());
                if (s.length() == 0) {
                    if (et.getId() == R.id.password) {
                        pas_del.setVisibility(View.GONE);
                    } else {
                        acc_del.setVisibility(View.GONE);
                    }
                    setUsable(false);
                } else {
                    if (et.getId() == R.id.password) {
    
                        acc_del.setVisibility(View.GONE);
                        pas_del.setVisibility(View.VISIBLE);
    
                        if (s.length() >= 6) {
                            setUsable(true);
                        } else {
                            setUsable(false);
                        }
                    } else {
    
                        acc_del.setVisibility(View.VISIBLE);
                        pas_del.setVisibility(View.GONE);
    
                    }
                }
            }
    
        }
    
    
        private void setUsable(boolean enabled) {
            if (enabled) {
                btn_login.setEnabled(enabled);
                btn_login.setBackgroundColor(getResources().getColor(R.color.red));
            } else {
                btn_login.setEnabled(enabled);
                btn_login.setBackgroundColor(getResources().getColor(R.color.color_h2));
            }
    
        }
    
        private void getFocus(EditText editText) {
            editText.setText("");
            editText.requestFocus();
            editText.setFocusableInTouchMode(true);
            editText.requestFocus();
        }
    }
    

demo源码

猜你喜欢

转载自blog.csdn.net/qq_25452989/article/details/78525030