使用中介者模式管理的登录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效果如下:
上一篇: 数据结构之(四)链表
下一篇: 杨杲是什么人?杨广之子杨杲生平简介