摘要:設(shè)置密保找回密碼界面思路由于設(shè)置密保和找回密碼兩個(gè)界面十分相似,代碼邏輯也十分相似,因此這兩個(gè)界面可以使用同一個(gè)布局文件和同一個(gè)來處理,首先導(dǎo)入所需圖片資源文件,再創(chuàng)建,將布局改為具體代碼如下先將設(shè)置密保部分隱藏,您的用戶名是請(qǐng)輸
設(shè)置密保&找回密碼界面 思路
由于設(shè)置密保和找回密碼兩個(gè)界面十分相似,代碼邏輯也十分相似,因此這兩個(gè)界面可以使用同一個(gè)布局文件和同一個(gè)
Activity 來處理,首先導(dǎo)入所需圖片資源文件,再創(chuàng)建 FindPswActivity ,將布局改為 LinearLayout
具體代碼如下:
activity_find_psw.xml設(shè)置密保&找回密碼邏輯 思路
由于設(shè)置密保界面和找回密碼界面用的同一個(gè) Activity ,在這個(gè)Activity中主要是根據(jù)從設(shè)置界面和登錄界面
putExtra 傳遞過來的 from 參數(shù)的值來判斷要跳轉(zhuǎn)到哪個(gè)界面,若值為 security 則是設(shè)置密保的界面,否則處理的就是找回密碼的界面,完成設(shè)置密保&找回密碼邏輯后再處理設(shè)置界面與登錄界面的點(diǎn)擊事件
具體代碼如下:
FindPswActivitypackage cn.edu.lt.android.boxueguapp.activity; import android.content.Context; import android.content.SharedPreferences; import android.content.pm.ActivityInfo; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import cn.edu.lt.android.boxueguapp.R; import cn.edu.lt.android.boxueguapp.utils.AnalysisUtils; import cn.edu.lt.android.boxueguapp.utils.MD5Utils; public class FindPswActivity extends AppCompatActivity { private EditText et_validate_name, et_user_name; private Button btn_validate; private TextView tv_main_title; private TextView tv_back; //從哪個(gè)界面跳轉(zhuǎn)過來的(from為security時(shí)是從設(shè)置密保界面跳轉(zhuǎn)過來的,否則就是從登錄界面跳轉(zhuǎn)過來的) private String from; private TextView tv_reset_psw, tv_user_name; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_find_psw); //設(shè)置此界面為豎屏 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); //獲取從登錄界面和設(shè)置界面?zhèn)鬟f過來的數(shù)據(jù) from = getIntent().getStringExtra("from"); init(); } /** * 獲取界面控件及處理相應(yīng)控件的點(diǎn)擊事件 */ private void init() { tv_main_title = (TextView) findViewById(R.id.tv_main_title); tv_back = (TextView) findViewById(R.id.tv_back); et_validate_name = (EditText) findViewById(R.id.et_validate_name); btn_validate = (Button) findViewById(R.id.btn_validate); tv_reset_psw = (TextView) findViewById(R.id.tv_reset_psw); et_user_name = (EditText) findViewById(R.id.et_user_name); tv_user_name = (TextView) findViewById(R.id.tv_user_name); if ("security".equals(from)) { tv_main_title.setText("設(shè)置密保"); } else { tv_main_title.setText("找回密碼"); //將隱藏的控件顯示出來 tv_user_name.setVisibility(View.VISIBLE); et_user_name.setVisibility(View.VISIBLE); } tv_back.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FindPswActivity.this.finish(); } }); btn_validate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String validateName = et_validate_name.getText().toString().trim(); if ("security".equals(from)) {//設(shè)置密保 if (TextUtils.isEmpty(validateName)) { Toast.makeText(FindPswActivity.this, "請(qǐng)輸入要驗(yàn)證的姓名", Toast.LENGTH_SHORT).show(); return; } else { Toast.makeText(FindPswActivity.this, "密保設(shè)置成功", Toast.LENGTH_SHORT).show(); //保存密保到SharedPreferences saveSecurity(validateName); FindPswActivity.this.finish(); } } else {//找回密碼 String userName = et_user_name.getText().toString().trim(); String sp_security = readSecurity(userName); if (TextUtils.isEmpty(userName)) { Toast.makeText(FindPswActivity.this, "請(qǐng)輸入您的用戶名", Toast.LENGTH_SHORT).show(); return; } else if (!isExistUserName(userName)) { Toast.makeText(FindPswActivity.this, "您輸入的用戶名不存在", Toast.LENGTH_SHORT).show(); return; } else if (TextUtils.isEmpty(validateName)) { Toast.makeText(FindPswActivity.this, "請(qǐng)輸入要驗(yàn)證的姓名", Toast.LENGTH_SHORT).show(); return; } if (!validateName.equals(sp_security)) { Toast.makeText(FindPswActivity.this, "輸入的密保不正確", Toast.LENGTH_SHORT).show(); return; } else { //輸入的密保正確,重新給用戶設(shè)置一個(gè)密碼 tv_reset_psw.setVisibility(View.VISIBLE); tv_reset_psw.setText("初始密碼:123456"); savePsw(userName); } } } }); } /** * 保存初始化密碼 * @param userName */ private void savePsw(String userName) { String md5Psw = MD5Utils.md5("123456");//把密碼用Md5加密 SharedPreferences sp = getSharedPreferences("loginInfo", MODE_PRIVATE);//loginInfo表示文件名 SharedPreferences.Editor editor = sp.edit();//獲取編輯器 editor.putString(userName, md5Psw); editor.commit();//提交修改 } /** * 保存密保到SharedPreferences中 */ private void saveSecurity(String validateName) { SharedPreferences sp = getSharedPreferences("loginInfo", MODE_PRIVATE);//loginInfo表示文件名 SharedPreferences.Editor editor = sp.edit();//獲取編輯器 editor.putString(AnalysisUtils.readLoginUserName(this) + "_security", validateName);//存入賬號(hào)對(duì)應(yīng)的密保 editor.commit();//提交修改 } /** * 從SharedPreferences中讀取密保 */ private String readSecurity(String userName) { SharedPreferences sp = getSharedPreferences("loginInfo", Context.MODE_PRIVATE); String security = sp.getString(userName + "_security", ""); return security; } /** * 從SharedPreferences中根據(jù)用戶輸入的用戶名來判斷是否有此用戶名 */ private boolean isExistUserName(String userName) { boolean hasUserName = false; SharedPreferences sp = getSharedPreferences("loginInfo", MODE_PRIVATE); String spPsw = sp.getString(userName, ""); if (!TextUtils.isEmpty(spPsw)) { hasUserName = true; } return hasUserName; } }LoginActivity
//找回密碼控件的點(diǎn)擊事件 tv_find_psw.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //跳轉(zhuǎn)找回密碼界面 Intent intent=new Intent(LoginActivity.this,FindPswActivity.class); startActivity(intent); } });SettingActivity
//設(shè)置密保的點(diǎn)擊事件 rl_security_setting.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(SettingActivity.this, FindPswActivity.class); intent.putExtra("from", "security"); startActivity(intent); } });優(yōu)化 思路
為了界面美觀以及操作的便捷,找回密碼點(diǎn)擊驗(yàn)證后,本需要手動(dòng)回退到登錄界面,現(xiàn)本人加入倒計(jì)時(shí),倒計(jì)時(shí)截止時(shí)將自動(dòng)跳轉(zhuǎn)登錄界面
FindPswActivityprivate int countdown = 3;
//輸入的密保正確,重新給用戶設(shè)置一個(gè)密碼 tv_reset_psw.setVisibility(View.VISIBLE); tv_reset_psw.setTextColor(0xffff0000); tv_reset_psw.setText("初始密碼為123456"); tv_countdown.setVisibility(View.VISIBLE); tv_countdown.setAlpha(0.5f); tv_countdown.setText("此界面將在"+countdown+"秒后跳轉(zhuǎn)"); savePsw(userName); //倒計(jì)時(shí)跳轉(zhuǎn) final Timer timer = new Timer(); TimerTask timerTask = new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() { // UI thread @Override public void run() { countdown--; tv_countdown.setVisibility(View.VISIBLE); tv_countdown.setText("此界面將在"+countdown+"秒后跳轉(zhuǎn)"); if(countdown == 0){ timer.cancel(); Intent intent = new Intent(FindPswActivity.this, LoginActivity.class); startActivity(intent); FindPswActivity.this.finish();//跳轉(zhuǎn)后關(guān)閉當(dāng)前頁(yè)面 } } }); } }; timer.schedule(timerTask,1000,1000);運(yùn)行效果
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/68305.html
摘要:設(shè)置界面思路設(shè)置界面有三個(gè)功能,分別為修改密碼設(shè)置密保和退出登錄。 設(shè)置界面 思路 設(shè)置界面有三個(gè)功能,分別為修改密碼、設(shè)置密保和退出登錄。創(chuàng)建 SettingActivity ,修改布局為 LinearLayout 具體代碼如下: activity_setting.xml ...
摘要:標(biāo)題欄思路由于項(xiàng)目中大部分界面都有一個(gè)后退鍵和一個(gè)標(biāo)題欄,為避免代碼冗雜以及便于利用,我們可以將后推薦和標(biāo)題欄單獨(dú)抽取出來定義一個(gè)標(biāo)題欄布局,在目錄下新建一個(gè),選用具體代碼如下注冊(cè)界面思路將圖片導(dǎo)入目錄下,在包下創(chuàng)建,修改為布局具體代碼如 標(biāo)題欄 思路 由于項(xiàng)目中大部分界面都有一個(gè)后退鍵和一個(gè)標(biāo)題欄,為避免代碼冗雜以及便于利用,我們可以將后推薦和標(biāo)題欄單獨(dú)抽取出來定義一個(gè)標(biāo)題欄布局,在...
閱讀 2850·2021-09-24 09:47
閱讀 4466·2021-08-27 13:10
閱讀 3091·2019-08-30 15:44
閱讀 1358·2019-08-29 12:56
閱讀 2649·2019-08-28 18:07
閱讀 2700·2019-08-26 14:05
閱讀 2712·2019-08-26 13:41
閱讀 1328·2019-08-26 13:33