官术网_书友最值得收藏!

3.7 實戰項目:登錄App

凡是賺錢的App,都要掌握用戶資源,這便少不了為用戶提供登錄頁面。本章末尾的實戰項目最終選定App登錄頁面,是因為要復習Activity的相關概念與用法。Activity是Android中最常用的組件,后續章節全部都會用到,所以要好好加以鞏固。下面就來設計并實現App的登錄功能。

3.7.1 設計思路

各家App的登錄頁面大同小異,要么是用戶名與密碼組合登錄,要么是手機號與驗證碼組合登錄,如果想做得更好一點,就要提供忘記密碼與記住密碼等功能。本章的App登錄項目把這些功能綜合一下,都呈現到頁面上,因為是練手,所以盡量讓學到的控件都派上用場。登錄頁面的設計圖初稿如圖3-34所示。

讀者找找看這個效果圖包含哪些本章的新控件?一定會發現以下6個控件。

  • 單選按鈕RadioButton:用來區分是密碼登錄還是驗證碼登錄。
  • 下拉框Spinner:用于區分用戶類型是個人用戶還是公司用戶。
  • 編輯框EditText:用來輸入手機號碼和密碼。
  • 復選框CheckBox:用于判斷是否記住密碼。
  • 相對布局RelativeLayout:指定手機號碼的編輯框放在手機號碼TextView的右邊。這里使用線性布局LinearLayout也可以。
  • 框架布局FrameLayout:忘記密碼的按鈕與密碼輸入框疊加。

圖3-34 登錄頁面的效果圖

圖3-35 找回密碼頁面的效果圖

至此,本章介紹的新控件基本都派上用場了。另外,本項目還要演示活動頁面的跳轉功能,點擊“忘記密碼”按鈕跳轉到找回密碼頁面,找回密碼頁面的效果如圖3-35所示。

找回密碼的頁面挺簡單,主要問題是兩個頁面之間的跳轉有哪些注意事項,頁面跳轉肯定要傳遞參數,一般唯一標識的手機號碼要傳過去,不然下一個頁面不知道要為哪個手機號碼修改密碼;新密碼也要傳回去,不然上一個頁面不知道密碼被改成什么了。

另外,有一個細微的用戶體驗問題:用戶會去找回密碼,肯定是發現輸入的密碼不對。修改完密碼回到登錄頁面時,密碼輸入框里還是原來錯誤的密碼,此時用戶清空錯誤密碼才能輸入新密碼。我們的App想讓用戶覺得好用,就得急用戶之所急、想用戶之所想,像之前錯誤密碼的情況應當由App在返回登錄頁面時自動清空原來錯誤的密碼。自動清空的操作放在onActivityResult方法中處理是一個辦法,但這樣處理有一個問題,如果用戶直接按返回鍵回到登錄頁面,onActivityResult方法發現數據為空就不會處理。

這個問題其實不難,只要認真看書,結合前面關于Activity生命周期的說明,就能夠找到解決辦法。重寫onRestart方法(確保是返回頁面),在方法內部加上清空密碼框的處理即可。這樣一來,無論用戶是修改完密碼回到登錄頁,還是點擊返回鍵回到登錄頁,App都會自動清空密碼框。

3.7.2 小知識:提醒對話框AlertDialog

使用驗證碼登錄時,App要向用戶手機發送短信驗證碼,但發送短信需要服務器支持,所以這里暫時使用隨機數模擬驗證碼,然后以對話框的形式在界面上提示用戶。另外,在登錄的過程中,App時常需要彈窗提示用戶選擇“是”或“否”,以此判斷下一步的處理邏輯。在本實戰項目開始之前,建議讀者先演練一下提醒對話框(AlertDialog)的用法。

AlertDialog是Android中最常用的對話框,可以完成常見的交互操作,如提示、確認、選擇等功能。AlertDialog沒有公開的構造函數,必須借助AlertDialog.Builder才能完成參數設置,AlertDialog.Builder的常用方法如下。

  • setIcon:設置標題的圖標。
  • setTitle:設置標題的文本。
  • setMessage:設置內容的文本。
  • setPositiveButton:設置肯定按鈕的信息,包括按鈕文本和點擊監聽器。
  • setNegativeButton:設置否定按鈕的信息,包括按鈕文本和點擊監聽器。
  • setNeutralButton:設置中性按鈕的信息,包括按鈕文本和點擊監聽器,該方法比較少用。

通過AlertDialog.Builder設置完參數,還需調用create方法才能生成AlertDialog對象。最后調用AlertDialog對象的show方法,在頁面上彈出提醒對話框。

下面是個顯示提醒對話框的代碼例子:

提醒對話框的彈窗效果如圖3-36所示,該對話框有標題、有內容,還有兩個按鈕。

圖3-36 AlertDialog的效果圖

用戶點擊不同的按鈕會觸發不同的處理邏輯。圖3-37所示為點擊“我再想想”按鈕后的頁面,圖3-38所示為點擊“殘忍卸載”按鈕后的頁面。

圖3-37 點擊“我再想想”的截圖

圖3-38 點擊“殘忍卸載”的截圖

3.7.3 代碼示例

前面的設計不但給出了兩個頁面的效果圖,而且給出了業務邏輯的大概思路,接下來主要是編碼將其實現。編碼過程分為3個步驟:

步驟01 先想好代碼文件與布局文件的名稱,比如登錄頁面的代碼文件取名LoginMainActivity.java,布局文件取名activity_login.xml;找回密碼頁面的代碼文件取名LoginForgetActivity.java,布局文件取名activity_login_forget.xml。記得在AndroidManifest.xml中注冊兩個頁面的acitivity節點,注冊代碼如下:

          <activity android:name=".LoginMainActivity" />
          <activity android:name=".LoginForgetActivity" />

步驟02 在res/layout目錄下創建布局文件activity_login.xml和activity_login_forget.xml,根據頁面效果圖編寫兩個頁面的布局定義文件。

步驟03 在項目的包名目錄下創建類LoginMainActivity和LoginForgetActivity,填入具體的控件操作與業務邏輯代碼。

除了登錄頁面和找回密碼頁面,登錄過程中還需要幾個提示彈窗,以便App與用戶之間更好地交互。比如圖3-39為獲取驗證碼時候的彈窗截圖,圖3-40為登錄成功之后的提示彈窗截圖。

圖3-39 獲取驗證碼的提示對話框

圖3-40 登錄成功的提示對話框

下面是登錄頁面LoginMainActivity.java的主要代碼片段,完整源碼參見本書附帶源碼middle模塊的LoginMainActivity.java和LoginForgetActivity.java:

主站蜘蛛池模板: 澎湖县| 水富县| 南皮县| 攀枝花市| 山阴县| 山阴县| 鸡西市| 浙江省| 玉林市| 永德县| 吉安县| 上饶市| 光山县| 深圳市| 杭州市| 石柱| 铜川市| 常德市| 房山区| 称多县| 蓝田县| 大新县| 卢湾区| 满城县| 贺州市| 兴化市| 砚山县| 出国| 宜城市| 麟游县| 宁安市| 自治县| 大厂| 崇文区| 庄河市| 思茅市| 左贡县| 图木舒克市| 宜宾县| 黄龙县| 莎车县|