Activity

1.Activity 在應用中提供了一個可交互的窗口。該窗口經常是填滿整個屏幕的,但也可以比屏幕小並且置於其他窗口上方。

2.一個應用可以由多個 Activity 組成,每個Activity都可以啓動別的Activity。當一個新的Activity啓動時,先前的一個Activity被stop,但系統會在“返回棧(backstack)”中保存。

3.當一個新的Activity啓動時,它被壓入返回棧並獲得用戶焦點;當按下返回按鈕時,它從棧中彈出(並銷燬),先前的Activity則繼續。

4.創建一個Activity:必須創建一個Activity(或者Activity已存在的子類)的子類。在子類中實現各種生命週期之間切換的回調方法。

兩個最重要的回調方法:

onCreate():在Activity被創建時調用。在實現中可以初始化Activity的主要組件。最重要的是調用setContentView()來定義該Activity的佈局;

onPause():當用戶離開當前Activity事被調用。通常用來提交需要被保存的更改。

實現用戶界面:

通過繼承View類來實現用戶界面。

在mainfest文件中生命Activity,格式如下:

<manifest ... >
  <application... >
      <activityandroid:name=".ExampleActivity" />
      ...
  </application... >
  ...
</manifest >

<activity>包含在<application>中,可以包含<intent-filter>和<meta-data>。

<activity>可以包含多種屬性,如android:theme等,其中android:name屬性是必須的。

使用intent 過濾器:通過指定<intent-filter>來聲明其他的應用程序怎樣激活它。

當新建應用時,main Activtiy中自動包含了以下intent過濾器:

<activity android:name=".ExampleActivity"android:icon="@drawable/app_icon">
   <intent-filter>
        <actionandroid:name="android.intent.action.MAIN" />
       <category android:name="android.intent.category.LAUNCHER"/>
   </intent-filter>
</activity>

<action>元素指明這個是應用的主入口,<category>指明這個Activity應被列入系統的應用列表。

如果無需其他應用來啓動這個Activity,那麼intent-filter只需包含上述內容即可。

但如果要讓該Activity響應其他應用傳來的隱式的intent的話,就必須添加額外的intent-filter

5.啓動Activity:通過調用startActivity(),並傳入描述你要啓動的Activity的Intent。

Intent可以明確指定要啓動的activity。如:

Intent intent = new Intent(this, SignInActivity.class);

startActivity(intent);

也可以只指定要執行的操作,然後由系統選擇一個應用。如:

Intent intent = new Intent(Intent.ACTION_SEND);

intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);

startActivity(intent);

6.啓動Activity來得到一個結果:調用startActivityForResult()來啓動其他Activity,然後實現onActivityResult()方法,當所請求的Activity結束時,它會返回一個Intent到  onActivityResult()方法中。如:

private void pickContact() {
    // Create anintent to "pick" a contact, as defined by the content provider URI
    Intent intent =new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
   startActivityForResult(intent, PICK_CONTACT_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, intresultCode, Intent data) {
    // If therequest went well (OK) and the request was PICK_CONTACT_REQUEST
    if (resultCode== Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) {
        // Perform a query to the contact's contentprovider for the contact's name
        Cursorcursor = getContentResolver().query(data.getData(),
        newString[] {Contacts.DISPLAY_NAME}, null, null, null);
        if(cursor.moveToFirst()) { // True if the cursor is not empty
            intcolumnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
            Stringname = cursor.getString(columnIndex);
            // Dosomething with the selected contact's name...
        }
    }
}

7.關閉一個Activity:調用finish()方法,也可以調用finishActivity()來關閉先前啓動的Activity。

8.Activity生命週期:

看幾種情況:

1.該Activity第一次被啓動時,依次調用onCreate()->onStart()->onResume();

2.按返回鍵時,依次調用onPause()->onStop()->onDestroy();

3.當直接進去其他程序而未退出時(比如按電話鍵直接進入電話程序)時,依次調用onPause()->onStop(),而不調用onDestroy();

4.返回到該Activity時,依次調用onRestart()->onStart()->onResume();

可以總結如下:

  • 使用onCreate()方法來實例化需要在應用中用到的object;
  • 當activity在前臺時,使用onResume()來運行services或者代碼段;
  • 當activity不在前臺時,使用onPause()來停止運行services或者代碼段;
  • 在activity被銷燬之前,使用onDestroy()來釋放資源;


9.爲Activity設置風格和主題:

通常的Activity都是佔滿整個屏幕的。但也可以設置成對話框模式,如彈出窗口等。只需在 AndroidManifest.xml 文件中更改Activity的android:theme屬性即可。如:

    <?xml version=“1.0“ encoding=“utf-8“?>  
    <manifest xmlns:android=“http://schemas.android.com/apk/res/android“  
        package=”net.learn2develop.Activity101”  
        android:versionCode=”1”  
        android:versionName=”1.0” >  
        <uses-sdk android:minSdkVersion= ”14” />  
        <application  
            android:icon=”@drawable/ic_launcher”  
            android:label=”@string/app_name”    
            android:theme=”@android:style/Theme.Dialog”>  
             <activity  
                android:label=”@string/app_name”  
                android:name=”.Activity101Activity” >  
                <intent-filter >  
                    <action android:name=”android.intent.action.MAIN”  />  
                    <category android:name=”android.intent.category.LAUNCHER” />  
                </intent-filter>  
             </activity>  
        </application>  
    </manifest>  

效果如圖:



10.隱藏Activity的標題:

只需要在OnCreate()方法中添加如下代碼:

    public void onCreate(Bundle savedInstanceState) {  
             super.onCreate(savedInstanceState);  
             //---hides the title bar---          
            requestWindowFeature(Window.FEATURE_NO_TITLE);  
            setContentView(R.layout.main);  
        }  

效果如圖:


發佈了25 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章