4.1.2 常用設定
AndroidManifest中的通常設定:
android:launchMode |
啟動模式 |
standard,singleTop,singleTask ,singleInstance, |
android:screenOrientation |
螢幕 |
landscape橫屏,portrait豎屏 |
android:label |
標題名稱 |
直接寫字元,或引用xml檔案中的@string/ |
android:name |
Activity類名 |
注意.。一般是manifest的package加name等於Activity類帶包名的全稱 |
|
|
|
Java常用方法
setContentView() |
設定Activity視圖 |
參數可以是①res/layout中的xml檔案,通過R.layout擷取int的id。②View類型的視圖。 |
findViewById |
尋找View,在XML |
R中的id。一般設定setContentView為R中的layout,通過這個方法尋找每個組件的引用。 |
|
|
|
|
|
|
Java其他方法
去標題 |
super.requestWindowFeature(Window.FEATURE_NO_TITLE)需要在執行setContentView之前操作,否則報錯。 |
全屏 |
super.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); |
橫豎向 |
super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);/ ActivityInfo.SCREEN_ORIENTATION_PORTRAIT |
螢幕參數widht,height,dpi等 |
Display display = super.getWindowManager().getDefaultDisplay(); DisplayMetrics displayMetrics = new DisplayMetrics(); display.getMetrics(displayMetrics); display.getWidth()等方法 displayMetrics.densityDpi等方法 |
|
|
4.1.3 生命週期
Activity有7個生命週期。Activity程式入口為方法onCreate或onStart。一些初始化的操作需要在這兩個方法中進行,例如設定layout,初始化控制項,添加事件監聽等。
每次啟動Activity都是從OnCreare開始,接著onStart,onResume。<喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+sLRCYWNrvPy+zb3hyvizzNDyo7pvblBhdXNlo6xvblN0b3CjrG9uRGVzdHJveaO7PC9wPgo8cD6wtGhvbWW8/MfQu7uzzNDyo7pvblBhdXNlo6xvblN0b3CjrMfQu7u72MC0o7pvblJlc3RhcnSjrG9uU3RyYXSjrG9uUmVzdW1loaM8L3A+CjxwPtTawb249tLUyc9BY3Rpdml0ecfQu7vKsaGjQWN0aXZpdHnKx7fxsbtEZXN0cm95yKG+9tPaxvS2r8Sjyr1sYXVuY2hNb2RloaM8L3A+CjxwPiA8L3A+CjxwPiA8L3A+Cjx0YWJsZSBib3JkZXI9"1" cellpadding="0" cellspacing="0" width="982">
onCreate
當首次建立Activity時調用。一些設定在該方法中進行:建立視圖,資料繫結等。還以Bundle的形式提供以前儲存的任何狀態的訪問。
onRestart
重新啟動Activity時調用。該活動仍在記憶體中,而不是重起一個新的Activity。
onStart
當Activity在螢幕上可見時調用。跟著onResume(),
onResume
當Activity與使用者互動時調用。
onPause
在系統啟動恢複前一個活動時調用。這通常用於未儲存的更改提交到持久性資料、 停止動畫和其他可能會佔用 CPU 等的東西。此方法的實現必須非常快速,因為此方法返回之前不會恢複的下一個活動。跟或 onResume(),如果活動返回到前面或 onStop(),如果它變得對使用者不可見。
onStop
因為另一項Activity已恢複或啟動,這個Activity已不再對的使用者可見時調用。這可能發生或者因為正在啟動一項新的Activity,現有之前的這一個Activity或被銷毀。如果這個Activity出錯或失敗將 onDestroy(),如果被使用者重新選中則調用 onRestart()。
onDestroy
Activity被銷毀前的最後調用。發生這種情況是因為Activity被finishing (或稱為 finish() ,或因為系統暫時銷毀此活動的Activity以節省空間的。您可以使用 isFinishing() 方法,區分這兩種情況。
4.2.4 Activity載入模式
在設定檔中android:launchMode可以進行配置Activity載入模式。四種activity的載入模式:standard,singleTop,singleTask,singleInstance。
1. standard:預設,表示如果需要就建立。這樣會導致,切換一次Activity,就建立一個。切換多少次,按back鍵就會返貨多少次。
例如ActivityMain使用standard模式,當他轉到ActivityOtherOne,又切換到ActivityMain時,原先在ActivityMain上面的EditText最開始輸入的文字也就沒有了。
2. singleTop:如果已經有一個這個Activity執行個體位於Activity棧的頂部時,就不產生新的執行個體。
3. singleTask: 會在一個新的task 中產生這個執行個體,以後每次調用都會使用這個,不會去產生新的執行個體了。
4. singleInstance: 這個跟singleTask基本上是一樣,只有一個區別:在這個模式下的Activity執行個體所處的task 中,只能有這個activity執行個體,不能有其他的執行個體。
4.2 Activity切換
首先簡單介紹Intent(意圖)。Intent類相當於平台中應用程式之間的通訊網路,Intent是一個要執行的操作的抽象說明,相當於各個Activity之間的橋樑。在一個Activity中想切換到另一個Activity,需要使用方法startActivity,並需要定義一個Intent來指定意圖的組件類。
4.2.1最簡單的Activity切換
定義Intent,使用Intent設定需要切換到哪個Activity。使用Activity的startActivity(Intent)方法。
Java代碼
Intent intent = new Intent(this, ActivityOtherOne.class); super.startActivity(intent);
4.2.2使用Intent傳遞資料
當然也可以在切換Activity的時候傳遞資料。可以直接使用intent的putExtra方法,也可以new一個Bundle傳輸入,但是需要讓intent把bundle進行putExtras下。
傳參數端的Activity:
Java代碼
Intent intent = new Intent(this, ActivityOtherOne.class); Bundle bundle = new Bundle(); bundle.putString("value1", "hello"); intent.putExtras(bundle); intent.putExtra("value2","world"); super.startActivity(intent);
接收方,例子中的ActivityOtherOne。需要在OnCreate方法中擷取。
Java代碼
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); . . . String value1 = super.getIntent().getExtras().getString("value1"); String value2 = super.getIntent().getExtras().getString("value2"); this.myEditText.setText("value1: " + value1 + ", value2: " + value2); }
4.2.3帶回傳資料的
1,在主Activitiy(ActivityMainExample)需要使用startActivityForResult方法切換Activity。其中第二個參數requestCode,只有當>= 0,在轉會此Activity時才會調用onActivityResult方法,得到回傳資料。
ActivityMainExample類中代碼
Java代碼
Intent intent = new Intent(this, ActivityOtherOne.class); Bundle bundle = new Bundle(); bundle.putString("value1", "hello"); intent.putExtras(bundle); intent.putExtra("value2","world"); super.startActivityForResult(intent, 1);
重寫onActivityResult方法,擷取回傳資料
Java代碼
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { String result1 = data.getExtras().getString("result1"); String result2 = data.getExtras().getString("result2"); Log.v(CommonConfig.LOG_TAG, "ActivityExample onActivityResult, requestCode: " + requestCode + ", resultCode: " + resultCode); Log.v(CommonConfig.LOG_TAG, "ActivityExample onActivityResult data - result1: " + result1 + ", result2: " + result2); }
2,在另一個Activity插入回傳資料,然後finish。
ActivityOtherTwo類中代碼。
Java代碼
@Override public void onClick(View v) { super.getIntent().putExtra("result1", "hello android"); super.getIntent().putExtra("result2", "hello google"); super.setResult(Activity.RESULT_OK, super.getIntent()); super.finish(); }
4.3 其他常用的Activity
一些常用的Activity子類,後面將詳細說明如何使用。寫好後更新連結地址
ActivityGroup http://limingnihao.iteye.com/
TabActivity http://limingnihao.iteye.com/
ListActivity http://limingnihao.iteye.com/