下面写一下登录注册的步骤
1.先搭建一个MVP的框架
2.然后把登录祖册融入到MVP框架中
4.再把最基本的布局写一下
5.然后写登录的源码
6.最后把注册的源码写一下
这是最基本的步骤,写的不是很详细还望大家多多见谅
第一步先把依赖写一下,这是最重要的
我把我这个项目的依赖给全部复制过来了,没有煽选还望大家见谅,多多益处O(∩_∩)O哈哈~
//圆形进度条加载依赖
implementation 'com.czp.arcProgressBar:ArcProgressBar:1.0.1'
/*banner轮播图 依赖*/
implementation 'com.youth.banner:banner:1.4.9'
//导入Design包
implementation 'com.android.support:design:28.+'
//Okgo
implementation 'com.lzy.net:okgo:3.0.4'
//Butterknife
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
//Glide加载图片
implementation 'com.github.bumptech.glide:glide:3.7.0'
//*ZXing二维码扫描*/
implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.2.1'
/*Picasso*/
implementation 'com.squareup.picasso:picasso:2.3.2'
/*gson解析*/
implementation 'com.google.code.gson:gson:2.8.5'
/*okhttp网络请求*/
implementation 'com.squareup.okhttp3:okhttp:3.12.0'
//RecyclerView
implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30'
//image-loader
implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
//banner仿魅族的依赖
implementation 'com.github.pinguo-zhouwei:MZBannerView:v2.0.2'
implementation 'com.facebook.fresco:fresco:1.11.0'
第二步权限
登录注册只有一个获取网络的权限
<uses-permission android:name="android.permission.INTERNET" />
我们现在写的是登录的MVP,下面是效果图
现在开始登录的操作
下面写一下用MVP框架写的登录的契约接口
import gsp.com.dimensionbusiness.data.bean.LoginBean;
public interface ILoginContract {
public interface ILoginView {
//回显数据
public void showData(LoginBean loginBean);
}
//P层
public interface ILoginPresenter<ILoginView> {
//绑定
public void attahView(ILoginContract.ILoginView loginView);
//解绑
public void detachView(ILoginContract.ILoginView loginView);
//数据获取
public void requestData(String name, String password);
}
//M层
public interface ILoginModel {
//请求数据
public void containData(String name, String password, CallBack callBack);
//接口回调
public interface CallBack {
public void onCallBack(LoginBean repsoneData);
}
}
}
然后写一下登录P层的类实现一下我们在登录契约类的P层的方法
import java.lang.ref.SoftReference;
import gsp.com.dimensionbusiness.data.bean.LoginBean;
import gsp.com.dimensionbusiness.di.consentar.ILoginContract;
import gsp.com.dimensionbusiness.di.mdel.LoginModel;
public class LoginPresenter implements ILoginContract.ILoginPresenter<ILoginContract.ILoginView> {
ILoginContract.ILoginView loginView;
private SoftReference<ILoginContract.ILoginView> reference;
private LoginModel model;
@Override
public void attahView(ILoginContract.ILoginView loginView) {
this.loginView = loginView;
reference = new SoftReference<>(loginView);
model = new LoginModel();
}
@Override
public void detachView(ILoginContract.ILoginView loginView) {
reference.clear();
}
@Override
public void requestData(String name, String password) {
model.containData(name,password,new ILoginContract.ILoginModel.CallBack() {
@Override
public void onCallBack(LoginBean repsoneData) {
loginView.showData(repsoneData);
}
});
}
}
最后写一下登录M层的类实现一下我们在登录契约类中M层的方法
import com.google.gson.Gson;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.StringCallback;
import com.lzy.okgo.model.Response;
import gsp.com.dimensionbusiness.data.Contain;
import gsp.com.dimensionbusiness.data.bean.LoginBean;
import gsp.com.dimensionbusiness.di.consentar.ILoginContract;
public class LoginModel implements ILoginContract.ILoginModel {
@Override
public void containData(String name, String password, final CallBack callBack) {
String urlString = Contain.LOGIN + "?phone=" + name + "&pwd=" + password;
OkGo.<String>post(urlString).execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
String responseData = response.body().toString();
Gson gson = new Gson();
LoginBean loginBean = gson.fromJson(responseData, LoginBean.class);
callBack.onCallBack(loginBean);
}
});
}
}
现在我们把登录的MVP写完了
现在我们开始入手登录的具体方法的布局
先写一下登录的布局,我登录是用的适配器,最后我会把适配器的类专门给写出来
<RelativeLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/back_xh"
tools:context=".BusinessActivity">
<ImageView
android:id="@+id/login_phone"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginTop="@dimen/dp_200"
android:layout_alignLeft="@id/view1"
android:background="@mipmap/phone"
/>
<EditText
android:id="@+id/EditText_name"
android:layout_toRightOf="@id/login_phone"
android:layout_width="@dimen/dp_260"
android:layout_height="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_200"
android:hint="手机号"
android:background="@null"
android:paddingLeft="@dimen/dp_20"
android:textSize="@dimen/sp_18"
android:maxLength="11"
android:textColor="#fff"
android:textColorHint="#fff"
/>
<View
android:id="@+id/view1"
android:layout_width="@dimen/dp_280"
android:layout_height="@dimen/dp_2"
android:layout_below="@id/EditText_name"
android:background="#fff"
android:layout_marginBottom="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_10"
android:layout_centerHorizontal="true"
/>
<ImageView
android:id="@+id/login_icon_lock"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginTop="@dimen/dp_20"
android:layout_below="@id/view1"
android:layout_alignLeft="@+id/view1"
android:background="@mipmap/key"
/>
<EditText
android:id="@+id/EditText_password"
android:layout_width="@dimen/dp_230"
android:layout_marginTop="@dimen/dp_20"
android:layout_height="@dimen/dp_20"
android:hint="登录密码"
android:background="@null"
android:textSize="@dimen/dp_18"
android:textColor="#fff"
android:textColorHint="#fff"
android:layout_toRightOf="@id/login_icon_lock"
android:layout_below="@id/view1"
android:paddingLeft="@dimen/dp_20"
android:inputType="numberPassword"
/>
<View
android:id="@+id/view2"
android:layout_width="@dimen/dp_280"
android:layout_height="@dimen/dp_2"
android:layout_below="@id/EditText_password"
android:background="#fff"
android:layout_marginBottom="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_10"
android:layout_centerHorizontal="true"
/>
<ImageView
android:id="@+id/yan"
android:layout_width="@dimen/dp_30"
android:layout_height="@dimen/dp_20"
android:background="@mipmap/login_icon_eye"
android:layout_toRightOf="@id/EditText_password"
android:layout_alignBottom="@id/EditText_password"
/>
<CheckBox
android:id="@+id/button_jizhu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="记住密码"
android:layout_below="@id/view2"
android:layout_marginTop="@dimen/dp_15"
android:textColor="#fff"
android:buttonTint="#fff"
android:layout_alignLeft="@+id/view2"
android:textSize="@dimen/sp_14"
/>
<TextView
android:id="@+id/button_register"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="快速注册"
android:layout_marginTop="@dimen/dp_15"
android:gravity="center"
android:textSize="@dimen/sp_14"
android:layout_below="@id/view2"
android:layout_alignBottom="@id/button_jizhu"
android:layout_alignRight="@+id/view2"
android:textColor="#fff"
/>
<Button
android:id="@+id/login"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_40"
android:layout_below="@id/button_jizhu"
android:text="登录"
android:textSize="@dimen/sp_18"
android:textColor="#ff5f71"
android:background="@drawable/shape_button"
android:layout_alignLeft="@+id/view1"
android:layout_alignRight="@+id/view1"
android:layout_marginTop="@dimen/dp_102"
android:layout_marginBottom="@dimen/dp_120"
/>
</RelativeLayout>
下面开始激动人心的时刻了,开始调用方法用于实现登录的效果,我还里面加了一个显示和隐藏密码的小功能
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.InputType;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import gsp.com.dimensionbusiness.data.bean.LoginBean;
import gsp.com.dimensionbusiness.di.consentar.ILoginContract;
import gsp.com.dimensionbusiness.di.prenser.LoginPresenter;
public class BusinessActivity extends AppCompatActivity implements ILoginContract.ILoginView {
@BindView(R.id.login_phone)
ImageView loginPhone;
@BindView(R.id.EditText_name)
EditText EditTextName;
@BindView(R.id.view1)
View view1;
@BindView(R.id.login_icon_lock)
ImageView loginIconLock;
@BindView(R.id.EditText_password)
EditText EditTextPassword;
@BindView(R.id.view2)
View view2;
@BindView(R.id.yan)
ImageView yan;
@BindView(R.id.button_jizhu)
CheckBox buttonJizhu;
@BindView(R.id.button_register)
TextView buttonRegister;
@BindView(R.id.login)
Button login;
private int eyeType = 0;
private LoginPresenter loginPresenter;
private SharedPreferences sp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_business);
ButterKnife.bind(this);
//创建P层
loginPresenter = new LoginPresenter();
loginPresenter.attahView(this);
//记住密码
sp = getSharedPreferences("login", MODE_PRIVATE);
if (sp.getBoolean("c1", false)) {
EditTextName.setText(sp.getString("name", ""));
EditTextPassword.setText(sp.getString("pwd", ""));
buttonJizhu.setChecked(true);
}
//点击跳转页面
buttonRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(BusinessActivity.this, RegisterActivity.class);
startActivity(intent);
}
});
isPasswordShowListener();
}
private void isPasswordShowListener() {
yan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (eyeType == 0) {
//点击隐藏密码
EditTextPassword.setInputType(false ?
(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) :
(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD));
eyeType = 1;
} else {
//或者显示密码
EditTextPassword.setInputType(true ?
(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) :
(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD));
eyeType = 0;
}
EditTextPassword.setSelection(EditTextPassword.getText().length());
}
});
}
@Override
public void showData(final LoginBean loginBean) {
//判断是否登录成功
//getStatus是成功的状态码0000
if (loginBean.getStatus().equals("0000")) {
runOnUiThread(new Runnable() {
@Override
public void run() {
//getMessage是成功码
Toast.makeText(BusinessActivity.this, "" + loginBean.getMessage(), Toast.LENGTH_SHORT).show();
}
});
startActivity(new Intent(BusinessActivity.this, ShowActivity.class));
} else {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(BusinessActivity.this, "" + loginBean.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
}
@OnClick({R.id.login})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.login:
String name = EditTextName.getText().toString();
String password = EditTextPassword.getText().toString();
loginPresenter.requestData(name, password);
//记住密码
SharedPreferences.Editor editor = sp.edit();
editor.putString("name", name);
editor.putString("pwd", password);
editor.putBoolean("c1", buttonJizhu.isChecked());
editor.commit();
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
//P
loginPresenter.detachView(this);
}
}
现在我们写一下注册的MVP框架,下面是效果图
现在开始操作注册的框架
下面写一下用MVP写的注册契约接口
import gsp.com.dimensionbusiness.data.bean.RegisterBean;
public interface IRegisterContract {
public interface IRegisterView {
//回显数据
public void showData(RegisterBean registerBean);
}
//P层
public interface IRegisterPresenter<IRegisterView> {
//绑定
public void attahView(IRegisterContract.IRegisterView registerView);
//解绑
public void detachView(IRegisterContract.IRegisterView registerView);
//数据获取
public void requestData(String name, String password);
}
//M层
public interface IRegisterModel {
//请求数据
public void containData(String name, String password, CallBack callBack);
//接口回调
public interface CallBack {
public void onCallBack(RegisterBean registerBean);
}
}
}
然后写一下P层的类实现一下我们在注册的契约类中P层的方法
import java.lang.ref.SoftReference;
import gsp.com.dimensionbusiness.data.bean.LoginBean;
import gsp.com.dimensionbusiness.data.bean.RegisterBean;
import gsp.com.dimensionbusiness.di.consentar.ILoginContract;
import gsp.com.dimensionbusiness.di.consentar.IRegisterContract;
import gsp.com.dimensionbusiness.di.mdel.LoginModel;
import gsp.com.dimensionbusiness.di.mdel.RegisterModel;
public class RegisterPresenter implements IRegisterContract.IRegisterPresenter<IRegisterContract.IRegisterView> {
IRegisterContract.IRegisterView registerView;
private SoftReference<IRegisterContract.IRegisterView> softReference;
private RegisterModel registerModel;
@Override
public void attahView(IRegisterContract.IRegisterView registerView) {
this.registerView = registerView;
softReference = new SoftReference<>(registerView);
registerModel = new RegisterModel();
}
@Override
public void detachView(IRegisterContract.IRegisterView registerView) {
softReference.clear();
}
@Override
public void requestData(String name, String password) {
registerModel.containData(name,password,new IRegisterContract.IRegisterModel.CallBack() {
@Override
public void onCallBack(RegisterBean registerBean) {
registerView.showData(registerBean);
}
});
}
}
最后写一下M层的类实现一下我们在注册中契约类中M层的方法
import com.google.gson.Gson;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.StringCallback;
import com.lzy.okgo.model.Response;
import gsp.com.dimensionbusiness.data.Contain;
import gsp.com.dimensionbusiness.data.bean.RegisterBean;
import gsp.com.dimensionbusiness.di.consentar.IRegisterContract;
public class RegisterModel implements IRegisterContract.IRegisterModel {
@Override
public void containData(String name, String password, final CallBack callBack) {
//这行代码是调用接口的,Contain这个类我专门放接口,我怕你们看不懂 我来解释一下
String urlString = Contain.REGISTER+ "?phone=" + name + "&pwd=" + password;
OkGo.<String>post(urlString).execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
String responseData = response.body().toString();
Gson gson = new Gson();
RegisterBean registerBean = gson.fromJson(responseData, RegisterBean.class);
callBack.onCallBack(registerBean);
}
});
}
}
现在我们把注册的MVP写完了
现在我们开始入手注册的具体方法和布局
先写一下注册的布局,我注册是用的适配器,最后我会把适配器的类专门给写出来
<RelativeLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/back_xh"
tools:context=".RegisterActivity">
<ImageView
android:id="@+id/sign_phone"
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_20"
android:layout_alignLeft="@id/view1"
android:layout_marginTop="@dimen/dp_160"
android:src="@mipmap/phone" />
<EditText
android:id="@+id/EditText_name"
android:layout_width="@dimen/dp_260"
android:layout_height="@dimen/dp_20"
android:hint="手机号"
android:layout_toRightOf="@id/sign_phone"
android:layout_marginTop="@dimen/dp_160"
android:paddingLeft="@dimen/dp_20"
android:maxLength="11"
android:textSize="@dimen/dp_18"
android:inputType="number"
android:textColorHint="#fff"
android:textColor="#fff"
android:background="@null"
/>
<View
android:id="@+id/view1"
android:layout_width="@dimen/dp_280"
android:layout_height="@dimen/dp_1"
android:layout_below="@+id/EditText_name"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginBottom="@dimen/dp_20"
android:background="#fff"
/>
<ImageView
android:id="@+id/lipai"
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_15"
android:src="@mipmap/dun"
android:layout_below="@id/view1"
android:layout_alignLeft="@id/view1"
/>
<EditText
android:id="@+id/EditText_Verification"
android:layout_below="@id/view1"
android:layout_toRightOf="@+id/sign_phone"
android:layout_width="@dimen/dp_190"
android:layout_marginTop="@dimen/dp_15"
android:layout_height="@dimen/dp_20"
android:paddingLeft="@dimen/dp_20"
android:background="@null"
android:hint="验证码"
android:textSize="@dimen/sp_18"
android:maxLength="6"
android:inputType="number"
android:textColorHint="#fff"
android:textColor="#fff"
/>
<TextView
android:id="@+id/sign_get_code"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/EditText_Verification"
android:text="获取验证码"
android:textColor="#fff"
android:layout_alignBottom="@id/EditText_Verification"
/>
<View
android:id="@+id/view2"
android:layout_width="@dimen/dp_280"
android:layout_height="@dimen/dp_1"
android:layout_below="@id/EditText_Verification"
android:layout_centerVertical="true"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginBottom="@dimen/dp_20"
android:background="#fff"
android:layout_alignLeft="@id/view1"
/>
<ImageView
android:id="@+id/sign_lock"
android:layout_width="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_15"
android:layout_height="@dimen/dp_20"
android:src="@mipmap/key"
android:layout_below="@id/view2"
android:layout_alignLeft="@id/view2"
/>
<EditText
android:id="@+id/EditText_password"
android:layout_width="@dimen/dp_230"
android:layout_height="@dimen/dp_20"
android:layout_alignLeft="@id/sign_lock"
android:layout_toRightOf="@id/sign_lock"
android:layout_marginLeft="@dimen/dp_20"
android:paddingLeft="@dimen/dp_20"
android:layout_below="@id/view2"
android:background="@null"
android:layout_marginTop="@dimen/dp_15"
android:hint="登录密码"
android:textColor="#fff"
android:textSize="@dimen/dp_18"
android:inputType="numberPassword"
android:textColorHint="#fff"
/>
<ImageView
android:id="@+id/yan"
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_20"
android:layout_alignBottom="@id/EditText_password"
android:layout_toRightOf="@id/EditText_password"
android:src="@mipmap/login_icon_eye" />
<View
android:id="@+id/view3"
android:layout_width="@dimen/dp_280"
android:layout_height="@dimen/dp_1"
android:layout_centerHorizontal="true"
android:layout_below="@id/EditText_password"
android:layout_marginTop="@dimen/dp_10"
android:background="#fff"
/>
<TextView
android:id="@+id/keep"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/button_jizhu"
android:text="已有账户?立即登录"
android:layout_below="@id/view3"
android:layout_marginTop="@dimen/dp_15"
android:textSize="@dimen/dp_14"
android:layout_alignRight="@id/view3"
android:textColor="#fff"
/>
<Button
android:id="@+id/login"
android:layout_width="@dimen/dp_280"
android:layout_height="@dimen/dp_40"
android:layout_alignLeft="@id/view1"
android:layout_alignRight="@id/view1"
android:text="注册"
android:textColor="#ff5f71"
android:textSize="@dimen/dp_18"
android:background="@drawable/shape_button"
android:layout_marginTop="@dimen/dp_100"
android:layout_below="@id/keep"
/>
</RelativeLayout>
下面开始最激动人心的时刻了,开始调用方法用于实现注册的效果,我还里面加了一个显示和隐藏密码的小功能,还有就是验证码的具体功能我没有发布,还望大家见谅
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.InputType;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import gsp.com.dimensionbusiness.data.bean.RegisterBean;
import gsp.com.dimensionbusiness.di.consentar.IRegisterContract;
import gsp.com.dimensionbusiness.di.prenser.RegisterPresenter;
public class RegisterActivity extends AppCompatActivity implements IRegisterContract.IRegisterView {
@BindView(R.id.sign_phone)
ImageView signPhone;
@BindView(R.id.EditText_name)
EditText EditTextName;
@BindView(R.id.view1)
View view1;
@BindView(R.id.lipai)
ImageView lipai;
@BindView(R.id.EditText_Verification)
EditText EditTextVerification;
@BindView(R.id.sign_get_code)
TextView signGetCode;
@BindView(R.id.view2)
View view2;
@BindView(R.id.sign_lock)
ImageView signLock;
@BindView(R.id.EditText_password)
EditText EditTextPassword;
@BindView(R.id.yan)
ImageView yan;
@BindView(R.id.view3)
View view3;
@BindView(R.id.keep)
TextView keep;
@BindView(R.id.login)
Button login;
private int eyeType = 0;
private RegisterPresenter registerPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
ButterKnife.bind(this);
isPasswordShowListener();
//创建P层
registerPresenter = new RegisterPresenter();
registerPresenter.attahView(this);
//
keep.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(RegisterActivity.this, BusinessActivity.class);
startActivity(intent);
}
});
}
//这块是显示和隐藏密码的
private void isPasswordShowListener() {
yan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (eyeType == 0) {
//点击隐藏密码
EditTextPassword.setInputType(false ?
(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) :
(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD));
eyeType = 1;
} else {
//或者显示密码
EditTextPassword.setInputType(true ?
(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) :
(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD));
eyeType = 0;
}
//以上,还有一个问题,切换显隐后,光标会跳到最前面,为了解决这个问题,需要加上以下代码
EditTextPassword.setSelection(EditTextPassword.getText().length());
}
});
}
@Override
public void showData(final RegisterBean registerBean) {
//判断是否注册成功
//getStatus是成功的状态码0000
if (registerBean.getStatus().equals("0000")) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(RegisterActivity.this, "" + registerBean.getMessage(), Toast.LENGTH_SHORT).show();
}
});
startActivity(new Intent(RegisterActivity.this, BusinessActivity.class));
} else {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(RegisterActivity.this, "" + registerBean.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
}
@OnClick({R.id.login})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.login:
String name = EditTextName.getText().toString();
String password = EditTextPassword.getText().toString();
registerPresenter.requestData(name, password);
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
//P
registerPresenter.detachView(this);
}
}
再发布一个自定义的圆角效果,用用实现登录注册按钮的,效果图我会发一下
如果需要的话可以用一下
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="15dp" />
<solid android:color="#fff" />
<size
android:width="100dp"
android:height="20dp" />
<stroke
android:width="1dp"
android:color="#fff" />
</shape>
按照我上面的方法和步骤一步步写,现在应该可以实现登录注册的效果了
最后我来把我上面挖的坑给填一下,下面我写一下最简单的适配器,用于屏幕适配,这个适配器效果不是很好还望大家见谅,可以实现大部分手机屏幕
下面发写一下,你们复制一下就可以用
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Your custom size defind by references, can be writted in anywhere, any module, any values/*.xml, for example: -->
<dimen name="card_common_margin_left">@dimen/dp_15</dimen>
<!-- dp and sp values, must be defind in this file! -->
<!-- view size,you can add if there is no one -->
<dimen name="dp_m_60">-60dp</dimen>
<dimen name="dp_m_30">-30dp</dimen>
<dimen name="dp_m_20">-20dp</dimen>
<dimen name="dp_m_12">-12dp</dimen>
<dimen name="dp_m_10">-10dp</dimen>
<dimen name="dp_m_8">-8dp</dimen>
<dimen name="dp_m_5">-5dp</dimen>
<dimen name="dp_m_2">-2dp</dimen>
<dimen name="dp_m_1">-1dp</dimen>
<dimen name="dp_0">0dp</dimen>
<dimen name="dp_0_1">0.1dp</dimen>
<dimen name="dp_0_5">0.5dp</dimen>
<dimen name="dp_1">1dp</dimen>
<dimen name="dp_1_5">1.5dp</dimen>
<dimen name="dp_2">2dp</dimen>
<dimen name="dp_2_5">2.5dp</dimen>
<dimen name="dp_3">3dp</dimen>
<dimen name="dp_3_5">3.5dp</dimen>
<dimen name="dp_4">4dp</dimen>
<dimen name="dp_4_5">4.5dp</dimen>
<dimen name="dp_5">5dp</dimen>
<dimen name="dp_6">6dp</dimen>
<dimen name="dp_7">7dp</dimen>
<dimen name="dp_7_5">7.5dp</dimen>
<dimen name="dp_8">8dp</dimen>
<dimen name="dp_9">9dp</dimen>
<dimen name="dp_10">10dp</dimen>
<dimen name="dp_11">11dp</dimen>
<dimen name="dp_12">12dp</dimen>
<dimen name="dp_13">13dp</dimen>
<dimen name="dp_14">14dp</dimen>
<dimen name="dp_15">15dp</dimen>
<dimen name="dp_16">16dp</dimen>
<dimen name="dp_17">17dp</dimen>
<dimen name="dp_18">18dp</dimen>
<dimen name="dp_19">19dp</dimen>
<dimen name="dp_20">20dp</dimen>
<dimen name="dp_21">21dp</dimen>
<dimen name="dp_22">22dp</dimen>
<dimen name="dp_23">23dp</dimen>
<dimen name="dp_24">24dp</dimen>
<dimen name="dp_25">25dp</dimen>
<dimen name="dp_26">26dp</dimen>
<dimen name="dp_27">27dp</dimen>
<dimen name="dp_28">28dp</dimen>
<dimen name="dp_29">29dp</dimen>
<dimen name="dp_30">30dp</dimen>
<dimen name="dp_31">31dp</dimen>
<dimen name="dp_32">32dp</dimen>
<dimen name="dp_33">33dp</dimen>
<dimen name="dp_34">34dp</dimen>
<dimen name="dp_35">35dp</dimen>
<dimen name="dp_36">36dp</dimen>
<dimen name="dp_37">37dp</dimen>
<dimen name="dp_38">38dp</dimen>
<dimen name="dp_39">39dp</dimen>
<dimen name="dp_40">40dp</dimen>
<dimen name="dp_41">41dp</dimen>
<dimen name="dp_42">42dp</dimen>
<dimen name="dp_43">43dp</dimen>
<dimen name="dp_44">44dp</dimen>
<dimen name="dp_45">45dp</dimen>
<dimen name="dp_46">46dp</dimen>
<dimen name="dp_47">47dp</dimen>
<dimen name="dp_48">48dp</dimen>
<dimen name="dp_49">49dp</dimen>
<dimen name="dp_50">50dp</dimen>
<dimen name="dp_51">51dp</dimen>
<dimen name="dp_52">52dp</dimen>
<dimen name="dp_53">53dp</dimen>
<dimen name="dp_54">54dp</dimen>
<dimen name="dp_55">55dp</dimen>
<dimen name="dp_56">56dp</dimen>
<dimen name="dp_57">57dp</dimen>
<dimen name="dp_58">58dp</dimen>
<dimen name="dp_59">59dp</dimen>
<dimen name="dp_60">60dp</dimen>
<dimen name="dp_61">61dp</dimen>
<dimen name="dp_62">62dp</dimen>
<dimen name="dp_63">63dp</dimen>
<dimen name="dp_64">64dp</dimen>
<dimen name="dp_65">65dp</dimen>
<dimen name="dp_66">66dp</dimen>
<dimen name="dp_67">67dp</dimen>
<dimen name="dp_68">68dp</dimen>
<dimen name="dp_69">69dp</dimen>
<dimen name="dp_70">70dp</dimen>
<dimen name="dp_71">71dp</dimen>
<dimen name="dp_72">72dp</dimen>
<dimen name="dp_73">73dp</dimen>
<dimen name="dp_74">74dp</dimen>
<dimen name="dp_75">75dp</dimen>
<dimen name="dp_76">76dp</dimen>
<dimen name="dp_77">77dp</dimen>
<dimen name="dp_78">78dp</dimen>
<dimen name="dp_79">79dp</dimen>
<dimen name="dp_80">80dp</dimen>
<dimen name="dp_81">81dp</dimen>
<dimen name="dp_82">82dp</dimen>
<dimen name="dp_83">83dp</dimen>
<dimen name="dp_84">84dp</dimen>
<dimen name="dp_85">85dp</dimen>
<dimen name="dp_86">86dp</dimen>
<dimen name="dp_87">87dp</dimen>
<dimen name="dp_88">88dp</dimen>
<dimen name="dp_89">89dp</dimen>
<dimen name="dp_90">90dp</dimen>
<dimen name="dp_91">91dp</dimen>
<dimen name="dp_92">92dp</dimen>
<dimen name="dp_93">93dp</dimen>
<dimen name="dp_94">94dp</dimen>
<dimen name="dp_95">95dp</dimen>
<dimen name="dp_96">96dp</dimen>
<dimen name="dp_97">97dp</dimen>
<dimen name="dp_98">98dp</dimen>
<dimen name="dp_99">99dp</dimen>
<dimen name="dp_100">100dp</dimen>
<dimen name="dp_101">101dp</dimen>
<dimen name="dp_102">102dp</dimen>
<dimen name="dp_103">103dp</dimen>
<dimen name="dp_104">104dp</dimen>
<dimen name="dp_104_5">104.5dp</dimen>
<dimen name="dp_105">105dp</dimen>
<dimen name="dp_106">106dp</dimen>
<dimen name="dp_107">107dp</dimen>
<dimen name="dp_108">108dp</dimen>
<dimen name="dp_109">109dp</dimen>
<dimen name="dp_110">110dp</dimen>
<dimen name="dp_111">111dp</dimen>
<dimen name="dp_112">112dp</dimen>
<dimen name="dp_113">113dp</dimen>
<dimen name="dp_114">114dp</dimen>
<dimen name="dp_115">115dp</dimen>
<dimen name="dp_116">116dp</dimen>
<dimen name="dp_117">117dp</dimen>
<dimen name="dp_118">118dp</dimen>
<dimen name="dp_119">119dp</dimen>
<dimen name="dp_120">120dp</dimen>
<dimen name="dp_121">121dp</dimen>
<dimen name="dp_122">122dp</dimen>
<dimen name="dp_123">123dp</dimen>
<dimen name="dp_124">124dp</dimen>
<dimen name="dp_125">125dp</dimen>
<dimen name="dp_126">126dp</dimen>
<dimen name="dp_127">127dp</dimen>
<dimen name="dp_128">128dp</dimen>
<dimen name="dp_129">129dp</dimen>
<dimen name="dp_130">130dp</dimen>
<dimen name="dp_131">131dp</dimen>
<dimen name="dp_132">132dp</dimen>
<dimen name="dp_133">133dp</dimen>
<dimen name="dp_134">134dp</dimen>
<dimen name="dp_134_5">134.5dp</dimen>
<dimen name="dp_135">135dp</dimen>
<dimen name="dp_136">136dp</dimen>
<dimen name="dp_137">137dp</dimen>
<dimen name="dp_138">138dp</dimen>
<dimen name="dp_139">139dp</dimen>
<dimen name="dp_140">140dp</dimen>
<dimen name="dp_141">141dp</dimen>
<dimen name="dp_142">142dp</dimen>
<dimen name="dp_143">143dp</dimen>
<dimen name="dp_144">144dp</dimen>
<dimen name="dp_145">145dp</dimen>
<dimen name="dp_146">146dp</dimen>
<dimen name="dp_147">147dp</dimen>
<dimen name="dp_148">148dp</dimen>
<dimen name="dp_149">149dp</dimen>
<dimen name="dp_150">150dp</dimen>
<dimen name="dp_151">151dp</dimen>
<dimen name="dp_152">152dp</dimen>
<dimen name="dp_153">153dp</dimen>
<dimen name="dp_154">154dp</dimen>
<dimen name="dp_155">155dp</dimen>
<dimen name="dp_156">156dp</dimen>
<dimen name="dp_157">157dp</dimen>
<dimen name="dp_158">158dp</dimen>
<dimen name="dp_159">159dp</dimen>
<dimen name="dp_160">160dp</dimen>
<dimen name="dp_161">161dp</dimen>
<dimen name="dp_162">162dp</dimen>
<dimen name="dp_163">163dp</dimen>
<dimen name="dp_164">164dp</dimen>
<dimen name="dp_165">165dp</dimen>
<dimen name="dp_166">166dp</dimen>
<dimen name="dp_167">167dp</dimen>
<dimen name="dp_168">168dp</dimen>
<dimen name="dp_169">169dp</dimen>
<dimen name="dp_170">170dp</dimen>
<dimen name="dp_171">171dp</dimen>
<dimen name="dp_172">172dp</dimen>
<dimen name="dp_173">173dp</dimen>
<dimen name="dp_174">174dp</dimen>
<dimen name="dp_175">175dp</dimen>
<dimen name="dp_176">176dp</dimen>
<dimen name="dp_177">177dp</dimen>
<dimen name="dp_178">178dp</dimen>
<dimen name="dp_179">179dp</dimen>
<dimen name="dp_180">180dp</dimen>
<dimen name="dp_181">181dp</dimen>
<dimen name="dp_182">182dp</dimen>
<dimen name="dp_183">183dp</dimen>
<dimen name="dp_184">184dp</dimen>
<dimen name="dp_185">185dp</dimen>
<dimen name="dp_186">186dp</dimen>
<dimen name="dp_187">187dp</dimen>
<dimen name="dp_188">188dp</dimen>
<dimen name="dp_189">189dp</dimen>
<dimen name="dp_190">190dp</dimen>
<dimen name="dp_191">191dp</dimen>
<dimen name="dp_191_25">191.25dp</dimen>
<dimen name="dp_192">192dp</dimen>
<dimen name="dp_193">193dp</dimen>
<dimen name="dp_194">194dp</dimen>
<dimen name="dp_195">195dp</dimen>
<dimen name="dp_196">196dp</dimen>
<dimen name="dp_197">197dp</dimen>
<dimen name="dp_198">198dp</dimen>
<dimen name="dp_199">199dp</dimen>
<dimen name="dp_200">200dp</dimen>
<dimen name="dp_201">201dp</dimen>
<dimen name="dp_202">202dp</dimen>
<dimen name="dp_203">203dp</dimen>
<dimen name="dp_204">204dp</dimen>
<dimen name="dp_205">205dp</dimen>
<dimen name="dp_206">206dp</dimen>
<dimen name="dp_207">207dp</dimen>
<dimen name="dp_208">208dp</dimen>
<dimen name="dp_209">209dp</dimen>
<dimen name="dp_210">210dp</dimen>
<dimen name="dp_211">211dp</dimen>
<dimen name="dp_212">212dp</dimen>
<dimen name="dp_213">213dp</dimen>
<dimen name="dp_214">214dp</dimen>
<dimen name="dp_215">215dp</dimen>
<dimen name="dp_216">216dp</dimen>
<dimen name="dp_217">217dp</dimen>
<dimen name="dp_218">218dp</dimen>
<dimen name="dp_219">219dp</dimen>
<dimen name="dp_220">220dp</dimen>
<dimen name="dp_221">221dp</dimen>
<dimen name="dp_222">222dp</dimen>
<dimen name="dp_223">223dp</dimen>
<dimen name="dp_224">224dp</dimen>
<dimen name="dp_225">225dp</dimen>
<dimen name="dp_226">226dp</dimen>
<dimen name="dp_227">227dp</dimen>
<dimen name="dp_228">228dp</dimen>
<dimen name="dp_229">229dp</dimen>
<dimen name="dp_230">230dp</dimen>
<dimen name="dp_231">231dp</dimen>
<dimen name="dp_232">232dp</dimen>
<dimen name="dp_233">233dp</dimen>
<dimen name="dp_234">234dp</dimen>
<dimen name="dp_235">235dp</dimen>
<dimen name="dp_236">236dp</dimen>
<dimen name="dp_237">237dp</dimen>
<dimen name="dp_238">238dp</dimen>
<dimen name="dp_239">239dp</dimen>
<dimen name="dp_240">240dp</dimen>
<dimen name="dp_241">241dp</dimen>
<dimen name="dp_242">242dp</dimen>
<dimen name="dp_243">243dp</dimen>
<dimen name="dp_244">244dp</dimen>
<dimen name="dp_245">245dp</dimen>
<dimen name="dp_246">246dp</dimen>
<dimen name="dp_247">247dp</dimen>
<dimen name="dp_248">248dp</dimen>
<dimen name="dp_249">249dp</dimen>
<dimen name="dp_250">250dp</dimen>
<dimen name="dp_251">251dp</dimen>
<dimen name="dp_252">252dp</dimen>
<dimen name="dp_253">253dp</dimen>
<dimen name="dp_254">254dp</dimen>
<dimen name="dp_255">255dp</dimen>
<dimen name="dp_256">256dp</dimen>
<dimen name="dp_257">257dp</dimen>
<dimen name="dp_258">258dp</dimen>
<dimen name="dp_259">259dp</dimen>
<dimen name="dp_260">260dp</dimen>
<dimen name="dp_261">261dp</dimen>
<dimen name="dp_262">262dp</dimen>
<dimen name="dp_263">263dp</dimen>
<dimen name="dp_264">264dp</dimen>
<dimen name="dp_265">265dp</dimen>
<dimen name="dp_266">266dp</dimen>
<dimen name="dp_267">267dp</dimen>
<dimen name="dp_268">268dp</dimen>
<dimen name="dp_269">269dp</dimen>
<dimen name="dp_270">270dp</dimen>
<dimen name="dp_271">271dp</dimen>
<dimen name="dp_272">272dp</dimen>
<dimen name="dp_273">273dp</dimen>
<dimen name="dp_274">274dp</dimen>
<dimen name="dp_275">275dp</dimen>
<dimen name="dp_276">276dp</dimen>
<dimen name="dp_277">277dp</dimen>
<dimen name="dp_278">278dp</dimen>
<dimen name="dp_279">279dp</dimen>
<dimen name="dp_280">280dp</dimen>
<dimen name="dp_281">281dp</dimen>
<dimen name="dp_282">282dp</dimen>
<dimen name="dp_283">283dp</dimen>
<dimen name="dp_284">284dp</dimen>
<dimen name="dp_285">285dp</dimen>
<dimen name="dp_286">286dp</dimen>
<dimen name="dp_287">287dp</dimen>
<dimen name="dp_288">288dp</dimen>
<dimen name="dp_289">289dp</dimen>
<dimen name="dp_290">290dp</dimen>
<dimen name="dp_291">291dp</dimen>
<dimen name="dp_292">292dp</dimen>
<dimen name="dp_293">293dp</dimen>
<dimen name="dp_294">294dp</dimen>
<dimen name="dp_295">295dp</dimen>
<dimen name="dp_296">296dp</dimen>
<dimen name="dp_297">297dp</dimen>
<dimen name="dp_298">298dp</dimen>
<dimen name="dp_299">299dp</dimen>
<dimen name="dp_300">300dp</dimen>
<dimen name="dp_301">301dp</dimen>
<dimen name="dp_302">302dp</dimen>
<dimen name="dp_303">303dp</dimen>
<dimen name="dp_304">304dp</dimen>
<dimen name="dp_305">305dp</dimen>
<dimen name="dp_306">306dp</dimen>
<dimen name="dp_307">307dp</dimen>
<dimen name="dp_308">308dp</dimen>
<dimen name="dp_309">309dp</dimen>
<dimen name="dp_310">310dp</dimen>
<dimen name="dp_311">311dp</dimen>
<dimen name="dp_312">312dp</dimen>
<dimen name="dp_313">313dp</dimen>
<dimen name="dp_314">314dp</dimen>
<dimen name="dp_315">315dp</dimen>
<dimen name="dp_316">316dp</dimen>
<dimen name="dp_317">317dp</dimen>
<dimen name="dp_318">318dp</dimen>
<dimen name="dp_319">319dp</dimen>
<dimen name="dp_320">320dp</dimen>
<dimen name="dp_321">321dp</dimen>
<dimen name="dp_322">322dp</dimen>
<dimen name="dp_323">323dp</dimen>
<dimen name="dp_324">324dp</dimen>
<dimen name="dp_325">325dp</dimen>
<dimen name="dp_326">326dp</dimen>
<dimen name="dp_327">327dp</dimen>
<dimen name="dp_328">328dp</dimen>
<dimen name="dp_329">329dp</dimen>
<dimen name="dp_330">330dp</dimen>
<dimen name="dp_331">331dp</dimen>
<dimen name="dp_332">332dp</dimen>
<dimen name="dp_333">333dp</dimen>
<dimen name="dp_334">334dp</dimen>
<dimen name="dp_335">335dp</dimen>
<dimen name="dp_336">336dp</dimen>
<dimen name="dp_337">337dp</dimen>
<dimen name="dp_338">338dp</dimen>
<dimen name="dp_339">339dp</dimen>
<dimen name="dp_340">340dp</dimen>
<dimen name="dp_341">341dp</dimen>
<dimen name="dp_342">342dp</dimen>
<dimen name="dp_343">343dp</dimen>
<dimen name="dp_344">344dp</dimen>
<dimen name="dp_345">345dp</dimen>
<dimen name="dp_346">346dp</dimen>
<dimen name="dp_347">347dp</dimen>
<dimen name="dp_348">348dp</dimen>
<dimen name="dp_349">349dp</dimen>
<dimen name="dp_350">350dp</dimen>
<dimen name="dp_351">351dp</dimen>
<dimen name="dp_352">352dp</dimen>
<dimen name="dp_353">353dp</dimen>
<dimen name="dp_354">354dp</dimen>
<dimen name="dp_355">355dp</dimen>
<dimen name="dp_356">356dp</dimen>
<dimen name="dp_357">357dp</dimen>
<dimen name="dp_358">358dp</dimen>
<dimen name="dp_359">359dp</dimen>
<dimen name="dp_360">360dp</dimen>
<dimen name="dp_365">365dp</dimen>
<dimen name="dp_370">370dp</dimen>
<dimen name="dp_400">400dp</dimen>
<dimen name="dp_410">410dp</dimen>
<dimen name="dp_422">422dp</dimen>
<dimen name="dp_472">472dp</dimen>
<dimen name="dp_500">500dp</dimen>
<dimen name="dp_600">600dp</dimen>
<dimen name="dp_640">640dp</dimen>
<dimen name="dp_720">720dp</dimen>
<!-- font size,you can add if there is no one -->
<dimen name="sp_6">6sp</dimen>
<dimen name="sp_7">7sp</dimen>
<dimen name="sp_8">8sp</dimen>
<dimen name="sp_9">9sp</dimen>
<dimen name="sp_10">10sp</dimen>
<dimen name="sp_11">11sp</dimen>
<dimen name="sp_12">12sp</dimen>
<dimen name="sp_13">13sp</dimen>
<dimen name="sp_14">14sp</dimen>
<dimen name="sp_15">15sp</dimen>
<dimen name="sp_16">16sp</dimen>
<dimen name="sp_17">17sp</dimen>
<dimen name="sp_18">18sp</dimen>
<dimen name="sp_19">19sp</dimen>
<dimen name="sp_20">20sp</dimen>
<dimen name="sp_21">21sp</dimen>
<dimen name="sp_22">22sp</dimen>
<dimen name="sp_23">23sp</dimen>
<dimen name="sp_24">24sp</dimen>
<dimen name="sp_25">25sp</dimen>
<dimen name="sp_28">28sp</dimen>
<dimen name="sp_30">30sp</dimen>
<dimen name="sp_32">32sp</dimen>
<dimen name="sp_34">34sp</dimen>
<dimen name="sp_36">36sp</dimen>
<dimen name="sp_38">38sp</dimen>
<dimen name="sp_40">40sp</dimen>
<dimen name="sp_42">42sp</dimen>
<dimen name="sp_48">48sp</dimen>
</resources>