android:src= @drawable/login_logo,android实现登录,Login姿势对不对?
android最常見的UI之一,登錄遍布各大APP,這么easy的東西還是要寫寫,主要是介紹下:密碼的顯示與隱藏,用戶名和密碼表單的網絡請求和提交方式等細節問題。看一個簡單的效果:
一,乾言
界面元素,logo,用戶名,密碼,登錄按鈕,底部兩個按鈕,訪問有loading效果。
點擊登錄,獲取用戶和密碼,簡單校驗,發送網絡請求,然后校驗請求結果,有異常做響應處理。
二,xml布局,view
布局代碼,有點多,直接貼出來。需要的對應改吧改吧。
注冊view和事件
findViewById的事情就別自己一個個復制了,使用ButterKnife依賴注入view和事件,類似的框架很多。例如:
@Bind(R.id.et_username)
public EditText et_username;
@Bind(R.id.et_password)
public EditText et_password;
在onCreate方法中,注入:
ButterKnife.bind(this);
之前犯過錯誤,@Bind view需要使用public修飾屬性。
Error:(68, 23) 錯誤: @Bind fields must not be private or static. (com.oair.oair_client.LoginActivity.iv_logo)
三,activity登錄邏輯
獲取edittext中的value,判斷用戶名,密碼是否為空,如果ok就進行網絡請求,post后臺登錄接口。我用retrofit+okhttp+RxJava/RxAndroid實現登錄,json用內部封裝的gson解析。
@OnClick(R.id.btn_login)
public void LoginOair(){
Login();
}
//Login 管理員登錄
public void Login() {
// 點擊登錄的時候 拿到用戶名和密碼的值
username = et_username.getText().toString();
password = et_password.getText().toString();
//判斷密碼是否為空
if (StringUtils.isEmpty(password)) {
showDialog(context.getResources().getString(R.string.dialog_pwd_empty));
} else {
//驗證登錄是否成功
postLogin();
}
}
private void postLogin() {
pb_login.setVisibility(View.VISIBLE);
MyRetrofitUtils.init().loginOair(password, new Subscriber() {
@Override
public void onCompleted() {
pb_login.setVisibility(View.GONE);
}
@Override
public void onError(Throwable e) {
checkLocalPwd();
LogUtils.debug(TAG,"error "+e.toString());
pb_login.setVisibility(View.GONE);
}
@Override
public void onNext(OairResponse oairResponse) {
LogUtils.debug(TAG,oairResponse.toString());
if (oairResponse.result == MyConstant.RESULT_SUCCESS){
enterMainActivity();
}else{ showDialog(context.getResources().getString(R.string.dialog_pwd_error));
}
}
});
}
不會用?可以使用你喜歡的網絡訪問方式,OKHTTP,HTTPUrlConnection,xUtils,volley都行。或者請看我的另外一篇文章,點擊打開:
RxJava+Retrofit+Gson實現網絡請求
四,隱藏和顯示密碼
EditText控件本身就封裝好了顯示與隱藏的方法,可以方便地將文本置為可見,或者隱藏。
//切換輸入密碼的模式,明文or密文顯示
private boolean isHidden=true;
@OnClick(R.id.iv_hidden_pwd)
public void hiddenPassword() {
if (isHidden) {
//設置EditText文本為可見的
et_password.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
} else {
//設置EditText文本為隱藏的
et_password.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
isHidden = !isHidden;
et_password.postInvalidate();
//切換后將EditText光標置于末尾
CharSequence charSequence = et_password.getText();
if (charSequence!=null) {
Spannable spanText = (Spannable) charSequence;
Selection.setSelection(spanText, charSequence.length());
}
}
五,輸入法彈出,布局調整
有時候手機頻幕小,彈出輸入法框,可能會將edittext控件擋住,影響輸入。這時候我們可以配置下activity。
重點就是android:configChanges和android:windowSoftInputMode的屬性,讓activity自動調整界面,輸入法位于輸入框的下方。
六,總結
看似簡單的一個功能,細看起來,知識點還是挺多的。這里面還有很多東西沒有列出,比如用戶名下拉選擇一個用戶登錄,登錄保存狀態下次免登錄,cookie的使用等。
未完待續,歡迎交流,杜乾,Dusan,Q 291902259。
總結
以上是生活随笔為你收集整理的android:src= @drawable/login_logo,android实现登录,Login姿势对不对?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android按钮最底,Android:
- 下一篇: 使用android studio查看内存