MVP框架用於實現登入註冊的方法和步驟_精簡版原始碼
阿新 • • 發佈:2019-01-13
下面寫一下登入註冊的步驟
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>