实现功能
1.账号自动登陆
2.输入密码时,有全清按钮
3.账号输入失败 > N次,要求用户输入验证码验证 
布局文件
登陆核心区域主要由以下几个部分
1.账号
2.密码
3.验证码
4.登陆按钮
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <!--应用图标-->
    <ImageView
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_gravity="center"
        android:background="@drawable/ic_launcher" />
    <!--中间空-->
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="16dp">
    </LinearLayout>
    <!--账号栏-->
    <LinearLayout
        android:paddingBottom="8dp"
        android:paddingTop="8dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/bg_search_edit_text"
        android:orientation="horizontal">
        <!--账号图片-->
        <ImageView
            android:paddingLeft="8dp"
            android:paddingRight="8dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:src="@drawable/img_login_account" />
        <EditText
            android:id="@+id/et_login_username"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:background="@color/transparent"
            android:layout_weight="1"
            android:hint="@string/prompt_username"
            android:inputType="text"
            android:maxLines="1"
            android:singleLine="true" />
        <!--消除输入图片-->
        <ImageView
            android:paddingLeft="8dp"
            android:paddingRight="8dp"
            android:id="@+id/img_account_clear"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:src="@drawable/img_login_clear"
            android:visibility="gone"
            />
    </LinearLayout>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="16dp">
    </LinearLayout>
    <!--密码栏-->
    <LinearLayout
        android:paddingBottom="8dp"
        android:paddingTop="8dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/bg_search_edit_text"
        android:orientation="horizontal">
        <ImageView
            android:paddingLeft="8dp"
            android:paddingRight="8dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:src="@drawable/img_login_code" />
        <EditText
            android:id="@+id/et_login_password"
            android:background="@color/transparent"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:hint="@string/prompt_password"
            android:imeActionId="@+id/action_login"
            android:imeActionLabel="@string/action_sign_in"
            android:imeOptions="actionUnspecified"
            android:inputType="textPassword"
            android:maxLines="1"
            android:singleLine="true" />
        <ImageView
            android:id="@+id/img_code_clear"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:src="@drawable/img_login_clear"
            android:paddingLeft="8dp"
            android:paddingRight="8dp"
            android:visibility="gone"/>
    </LinearLayout>
注
android:inputType="textPassword" 输入密码的显示***
android:singleLine="true"设置为单行模式
主程序
消除图片设置为隐藏,当edittest有数据时再显示
输入框监听
    mUsername.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) {
    }
    @Override
    public void afterTextChanged(Editable s) {
        String content = mUsername.getText().toString();
        if (!TextUtils.isEmpty(content)) {
            mAccountClear.setVisibility(View.VISIBLE);
            mUsername.setSelection(content.length());
        } else {
            mAccountClear.setVisibility(View.GONE);
        }
    }
});
mPassword.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) {
    }
    @Override
    public void afterTextChanged(Editable s) {
        String content = mPassword.getText().toString();
        if (!TextUtils.isEmpty(content)) {
            mCodeClear.setVisibility(View.VISIBLE);
            mPassword.setSelection(content.length());
        } else {
            mCodeClear.setVisibility(View.GONE);
        }
    }
});
消除按键监听
@OnClick(R.id.img_account_clear)
    void claerAccout(){
        if (null != mUsername) {
            mUsername.setText("");
        }
    }
@OnClick(R.id.img_code_clear)
void claerCode(){
    if (null != mPassword) {
        mPassword.setText("");
    }
}
登陆按钮监听
主要实现以下功能
1.判断用户名、密码是否为空,若为空,提示用户。
2.判断需不需要输入验证码,若需要显示验证码edittext和验证码图片
3.登陆。更新UI显示登录中
checkbox监听
若勾选,获取存储的账号密码,登陆