欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用中介者模式管理的登录UI模块

程序员文章站 2022-05-06 12:41:48
...

下面我们开发一个登录界面,界面中使用中介者矛盾管理界面中的控件。

1 首先创建登录界面的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.wang.mediatorpatternlogindemo.LoginActivity">

    <EditText
        android:id="@+id/etAccount"
        android:hint="请输入账号"
        android:padding="8dip"
        android:layout_marginRight="12dip"
        android:layout_marginLeft="12dip"
        android:layout_marginTop="24dip"
        android:background="@android:color/transparent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <EditText
        android:id="@+id/etPassword"
        android:hint="请输入密码"
        android:padding="8dip"
        android:layout_marginRight="12dip"
        android:layout_marginLeft="12dip"
        android:layout_marginTop="24dip"
        android:background="@android:color/transparent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <CheckBox
            android:id="@+id/cbRemember"
            android:text="记住账号"
            android:textSize="14sp"
            android:layout_marginTop="16dip"
            android:layout_marginLeft="12dip"
            android:layout_alignParentLeft="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <CheckBox
            android:id="@+id/cbAutoLogin"
            android:text="自动登录"
            android:textSize="14sp"
            android:layout_marginTop="16dip"
            android:layout_marginRight="12dip"
            android:layout_alignParentRight="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </RelativeLayout>

    <RelativeLayout
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    <Button
        android:id="@+id/btConfirm"
        android:textSize="16sp"
        android:text="确定"
        android:paddingBottom="6dip"
        android:paddingTop="6dip"
        android:paddingLeft="20dip"
        android:paddingRight="20dip"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="12dip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/btCancel"
        android:textSize="16sp"
        android:text="取消"
        android:paddingBottom="6dip"
        android:paddingTop="6dip"
        android:paddingLeft="20dip"
        android:paddingRight="20dip"
        android:layout_alignParentRight="true"
        android:layout_marginRight="12dip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    </RelativeLayout>

</LinearLayout>

2  在 activity中设置界面交互和业务逻辑:

 

package com.wang.mediatorpatternlogindemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Toast;

public class LoginActivity extends AppCompatActivity {
    private EditText etAccount, etPassword;
    private CheckBox cbRemember, cbAutoLogin;
    private Button btConfirm, btCancel;
    //账号信息
    private String mAccount, mPwd;
    //是否记住账号, 自动登录
    private boolean isRemember, isAuto;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initEvent();
    }

    private void initView() {
        etAccount = findViewById(R.id.etAccount);
        etPassword = findViewById(R.id.etPassword);
        cbAutoLogin = findViewById(R.id.cbAutoLogin);
        cbRemember = findViewById(R.id.cbRemember);
        btCancel = findViewById(R.id.btCancel);
        btConfirm = findViewById(R.id.btConfirm);

    }

    private void initEvent() {

        etAccount.addTextChangedListener(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) {

                mAccount = s.toString();
                //通知给activity
                change();
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });
        etPassword.setEnabled(false);
        etPassword.addTextChangedListener(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) {
                mPwd = s.toString();
                change();
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });
        btConfirm.setEnabled(false);
        btConfirm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(LoginActivity.this, "用户登录成功", Toast.LENGTH_SHORT).show();
            }
        });

        btCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(LoginActivity.this, "取消登录", Toast.LENGTH_SHORT).show();

            }
        });
        cbAutoLogin.setEnabled(false);
        cbAutoLogin.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                isAuto = isChecked;
                change();
            }
        });
        cbRemember.setEnabled(false);
        cbRemember.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                isRemember = isChecked;
                change();
            }
        });
    }

    /**
     * Activity是中介者,change作为管理控件找的中介者方法
     */
    private void change() {
        if (mAccount.isEmpty()) {
            etPassword.setEnabled(false);

            cbAutoLogin.setEnabled(false);
            cbRemember.setEnabled(false);

            btConfirm.setEnabled(false);
            btCancel.setEnabled(true);
        } else if (!TextUtils.isEmpty(mAccount) && TextUtils.isEmpty(mPwd)) {
            etPassword.setEnabled(true);

            cbAutoLogin.setEnabled(true);
            cbRemember.setEnabled(true);

            btCancel.setEnabled(true);
            btConfirm.setEnabled(false);
        } else if (!TextUtils.isEmpty(mAccount) && !TextUtils.isEmpty(mPwd)) {
            etPassword.setEnabled(true);

            cbRemember.setEnabled(true);
            cbAutoLogin.setEnabled(true);

            btCancel.setEnabled(true);
            btConfirm.setEnabled(true);
        }
    }
}

界面UI效果如下:

使用中介者模式管理的登录UI模块

相关标签: 登录界面