一、需要的知識(shí)
1、常見(jiàn)的幾種布局,線(xiàn)性布局LinearLayout、相對(duì)布局RelativeLayout、框架布局FrameLayout.
2、涉及常見(jiàn)幾種控件,單選按鈕RadioButton、下拉框Spinner、編輯框EditText、復(fù)選框CheckBox、按鈕、對(duì)話(huà)框AlertDialog。
3、Activity的生命周期、傳值等。
二、代碼實(shí)現(xiàn)
1、實(shí)現(xiàn)目標(biāo)。
分密碼和驗(yàn)證碼兩種方式登錄,點(diǎn)擊忘記密碼可以更換密碼,登錄成功彈出dialog。

登錄頁(yè)面.png
2、具體實(shí)現(xiàn)
(1)在AndroidManifest.xml 中配置
? (2) ?res/layout下面新建頁(yè)面的xml文件,最外層是LinearLayout ?下面是RadioGroup,然后RelativeLayout里面是TextView和Spinner,然后RelativeLayout 里面是TextView和EditText,然后RelativeLayout里面是TextView和FrameLayout ?FrameLayout包含EditText和Button,最后就是記住密碼的CheckBox和Button。
代碼如下:

頁(yè)面代碼1

頁(yè)面代碼2

頁(yè)面代碼3
(3)Activity編寫(xiě)邏輯代碼 大概思路:實(shí)現(xiàn)RadioGroup.OnCheckedChangeListener、AdapterView.OnItemSelectedListener、CompoundButton.OnCheckedChangeListener、TextWatcher、OnClickListener 這幾個(gè)接口,添加對(duì)應(yīng)頁(yè)面的監(jiān)聽(tīng),前一個(gè)頁(yè)面打包好數(shù)據(jù) 調(diào)用startActivityForResult,下個(gè)頁(yè)面接受處理,在返回前一個(gè)頁(yè)面時(shí),打包參數(shù)調(diào)用setResult finish()方法,最后前一個(gè)頁(yè)面重寫(xiě)onActivityResult方法處理返回的數(shù)據(jù)。
核心代碼:

監(jiān)聽(tīng)器適配器.png

接口實(shí)現(xiàn).png

傳值處理和dialog顯示.png
(4)最后記錄一下 activity生命周期 頁(yè)面A->B
頁(yè)面之間跳轉(zhuǎn):總體上是A頁(yè)面先調(diào)用onPause方法,然后B頁(yè)面依次調(diào)用onCreate/onRestart->onStart->onResume 最后A頁(yè)面onStop (返回上一級(jí)頁(yè)面,下級(jí)頁(yè)面還會(huì)調(diào)用一下onDestroy)。
橫豎屏切換: 原屏幕頁(yè)面onPause 到 onStop 到onDestroy 一路銷(xiāo)毀,然后新頁(yè)面onCreate?onStart?onResume。
按住Home鍵與返回app:從活動(dòng)狀態(tài)變?yōu)闀和顟B(tài),點(diǎn)擊操作之后 又變?yōu)榛顒?dòng)狀態(tài)。