環(huán)境:JDK+Andriod JDK
開發(fā)工具:Andriod studio+Genymotion+ADK
Activity:一個頁面
LinerLayout:線性布局 ?
android:id? —— 為控件指定相應的ID
android:text —— 指定控件當中顯示的文字,盡量使用strings.xml文件當中的字符串
android:grivity —— 指定控件基本位置,比如說居中棍郎,居右等
android:textSize —— 字體的大小
android:background —— 背景色
android:width —— 寬(dp)
android:height —— 高度
android:padding* —— 內邊距
android:sigleLine —— 如果設置為true的話屋休,控件的內容在同一行當中進行顯示臂寝,超出內容為省略號
android:layout_weight --用于給一個線性布局中的諸多視圖的重要度賦值与倡。
所有的視圖都有一個layout_weight值滩愁,默認為零虫给,意思是需要顯示
多大的視圖就占據(jù)多大的屏幕空間藤抡。若賦一個高于零的值,則將父視
圖中的可用空間分割抹估,分割大小具體取決于每一個視圖的layout_weight
值以及該值在當前屏幕布局的整體 layout_weight值和在其它視圖屏幕布
局的layout_weight值中所占的比率而定缠黍。
舉個例子:比如說我們在 水平方向上有一個文本標簽和兩個文本編輯元素。
該文本標簽并無指定layout_weight值药蜻,所以它將占據(jù)需要提供的最少空間瓷式。
如果兩個文本編輯元素每一個的layout_weight值都設置為1,則兩者平分
在父視圖布局剩余的寬度(因為我們聲明這兩者的重要度相等)语泽。如果兩個
文本編輯元素其中第一個的layout_weight值設置為1贸典,而第二個的設置為2,
則剩余空間的三分之二分給第一個踱卵,三分之一分給第二個(數(shù)值越小廊驼,重要度越高)。
如果用android:layout_weight="1"惋砂,要想使其真正的平均妒挎,則android:layout_width用"fill_parent"
android:orientation:內容的對其方向, horizontal和vertical西饵。分別表示水平和垂直
RelativeLayout:相對布局
在父親布局的相對位置
android:layout_alignParentLeft="true"http://在布局左邊
android:layout_alignParentRight="true"http://在布局右邊
android:layout_alignParentTop="true"http://在布局上面
android:layout_alignParentBottom="true "http://在布局的下面
在某個控件的相對位置
android:layout_toRightOf="@id/button1"http://在控件button1的右邊酝掩,不僅僅是緊靠著
android:layout_toLeftOf="@id/button1"http://在控件button2的左邊,不僅僅是緊靠著
android:layout_below="@id/button1 "http://在控件button1下面眷柔,不僅僅是正下方
android:layout_above=“@id/button1”//在控件button1下面,不僅僅是正下方
定義和某控件對齊
android:layout_alignTop=”@id/button1”//和控件button1上對齊
android:layout_alignBottom=”@id/button1”//和控件button1下對齊
android:layout_alignLeft=”@id/button1”//和控件button1左對齊
android:layout_alignRight=”@id/button1”//和控件button2右對齊
android:layout_centerHorizontal="true"http://水平居中
android:layout_centerVertical="true"
android:layout_centerInParent="true"
按鈕點擊事件輸入代碼:
findViewByID(R.id.button).setOnclickListener(new view.OncilckListener(){
Toast.makeTest(MainActivity.this,"文字內容”期虾,Toast.LENGTH_LONG).show();
簽名打包方法:
Build ?到 ?Genenrt Signed APK
在res中的AndriodMainifest.xml中可以修改應用的圖標
在test中的build.gardle中修改版本號
在java中新建一個類作為新的Activity原朝,從OnCreat方法開始
public classslashextendsAppCompatActivity {
@Override
public voidonCreate(Bundle savedInstanceState,PersistableBundle persistentState) {
super.onCreate(savedInstanceState,persistentState);
}
}
在AndriodMainifest.xml中設置為啟動頁面
找到按鈕的代碼:
parvate Button mButton;
mButton=(Button)findViewBy(R.Id.button);
設置點擊進入響應事件代碼:
private View.OnclickListener mOnClickListener=new View.OnClickListener(){
switch(v.getId){
case R.Id.button;
Intent intent=new Intent(XXXX.this,XXXX.class);
startActivity(intent);
break;
}
}
啟動頁自動跳轉的代碼:
Handlermhandler=newHandler();
mhandler.postDelayed(newRunnable() {
@Override
public voidrun() {
Intent intent=newIntent(slash.this,MainActivity.class);
startActivity(intent);
}
},1000);
兩個頁面穿上文本的代碼:
TextViewtextView=(TextView)findViewById(R.id.title);
Stringtitle=textView.getText().toString();
intent.putExtra("title",title);
接受:
Intent intent=getIntent();
if(intent!=null){
String title=intent.getStringExtra("title");
setTitle(title);
在傳輸類的時候需要在建立函數(shù)的時候添加序列化代碼:implements Serializable,在接受時要把序列化再強制轉換成類
來回傳輸?shù)拇a: ??
startActivityForResult(intent,1234);
setResult(1234,intent0);
@Override
protected voidonActivityResult(intrequestCode, intresultCode,Intent data) {
super.onActivityResult(requestCode,resultCode,data);
if(requestCode==1234&&resultCode==MainActivity.RESULT_CODE){
if(data!=null){
}
Activity的生命周期
Activity的生命周期
1. 從打開應用到按后退鍵
打開應用
onCreate() 方法執(zhí)行! 不可見
onStart() 方法執(zhí)行! 可見
onResume() 方法執(zhí)行! 可見&在前臺
按下后退鍵
onPause() 方法執(zhí)行! 可見
onStop() 方法執(zhí)行! 不可見
onDestroy() 方法執(zhí)行!不可見
2. 從打開應用到按主屏幕鍵 再到重新打開應用
打開應用
onCreate() 方法執(zhí)行!
onStart() 方法執(zhí)行!
onResume() 方法執(zhí)行!
按下主屏幕鍵
onPause() 方法執(zhí)行!
onStop() 方法執(zhí)行!
重新打開應用
onRestart() 方法執(zhí)行!
onStart() 方法執(zhí)行!
onResume() 方法執(zhí)行!
Activity在onPause() 和 onStop()后都可能由于內存不足等原因被殺死從而當用戶重新打開app時會重新執(zhí)行onCreat()方法镶苞。 onPause()方法在app被其他app覆蓋時會執(zhí)行喳坠,如果短時間內重新回到前面,則會執(zhí)行onResume()方法宾尚。如果長時間不可見的話則會執(zhí)行onStop()方法丙笋。
3. 橫豎屏切換問題
通過橫豎屏切換時發(fā)現(xiàn),Activity的生命周期的變化如下:
onPause() 方法執(zhí)行!
onStop() 方法執(zhí)行!
onDestroy() 方法執(zhí)行!
onCreate() 方法執(zhí)行!
onStart() 方法執(zhí)行!
onResume() 方法執(zhí)行!
是把當前的Activity銷毀后重新創(chuàng)建
在res目錄下新建layout-land文件夾煌贴,里面放的是Activity橫屏時顯示的布局御板,名字要與layout文件夾下的文件名字一樣。
設備旋轉前保存數(shù)據(jù):
重載onSaveInstanceState()方法
onPause() 方法執(zhí)行!
onStop() 方法執(zhí)行!
onSavaInstanceState(Bundle) 方法執(zhí)行
onDestroy() 方法執(zhí)行!
onCreate() 方法執(zhí)行!
onStart() 方法執(zhí)行!
onResume() 方法執(zhí)行!
方法onSavaInstanceState()默認的實現(xiàn)要求所有activity的視圖將自身狀態(tài)數(shù)據(jù)保存在Bundle對象中牛郑。在重新執(zhí)行onCreat()方法時會傳入Bundle對象怠肋。
onCreate() 方法執(zhí)行! /**首次打開app**/
Bundle對象為空
onStart() 方法執(zhí)行!
onResume() 方法執(zhí)行!
onPause() 方法執(zhí)行! /**旋轉手機屏幕**/
onSaveInstanceState() 方法執(zhí)行!
onStop() 方法執(zhí)行!
onDestroy() 方法執(zhí)行!
onCreate() 方法執(zhí)行!
Bundle對象獲取到的myInfo的值:
onStart() 方法執(zhí)行!
onResume() 方法執(zhí)行!
當旋轉手機屏幕并重新執(zhí)行onCreat()方法后在onSaveInstanceState()中向Bundle保存的值傳了過去。
那么有個問題淹朋,onSaveInstanceState()這個方法什么時候會執(zhí)行?一定會在onPause()和onStop()之間執(zhí)行么?
答案:onSaveInstanceState()這個方法不一定都會執(zhí)行笙各,當用戶按下后退鍵時,代表了不再需要這個Activity了础芍,這時候就沒有必要執(zhí)行這個方法了杈抢。但是,如果用戶按下主屏幕鍵或者這個Activity轉為后臺運行時仑性,這個時候需要保存信息惶楼,這個方法會執(zhí)行。
onRestart() 方法執(zhí)行! /**打開app**/
onStart() 方法執(zhí)行!
onResume() 方法執(zhí)行!
onPause() 方法執(zhí)行! /**按下后退鍵**/
onStop() 方法執(zhí)行!
onDestroy() 方法執(zhí)行!
onCreate() 方法執(zhí)行! /**打開app**/
Bundle對象為空
onStart() 方法執(zhí)行!
onResume() 方法執(zhí)行!
onPause() 方法執(zhí)行! /**按下主屏幕鍵**/
onSaveInstanceState() 方法執(zhí)行!
onStop() 方法執(zhí)行!
用戶離開當前activity管理的用戶界面诊杆,或需要回收內存時歼捐,activity也會被銷毀。
不過Android從不會為了回收內存而去銷毀正在運行的activity晨汹。activity只有在暫捅ⅲ或者停止狀態(tài)下才可能被銷毀。此時就會調用onSaveInstanceState()方法淘这。
調用這個方法時剥扣,用戶數(shù)據(jù)會被保存在Bundle對象中。然后操作將Bundle對象放入activity記錄中铝穷。
activity暫存后朦乏,Activity對象不再存在,但操作系統(tǒng)會將activity記錄保存起來氧骤。在需要回復activity時,操作系統(tǒng)可以使用暫存的activity記錄重新激活activity吃引。
常見的做法是覆蓋onSaveInstanceState()方法把數(shù)據(jù)保存在Bundle對象中筹陵,覆蓋onPause()方法處理其他需要處理的事情刽锤。
那么暫存的activity記錄可以保存多久?用戶按下后退鍵后,系統(tǒng)會徹底銷毀當前的activity朦佩。activity記錄也會被清除并思。系統(tǒng)重啟或長時間不適用這個activity時,記錄也會被刪除语稠。
fill_parent被match_parent替代