Android設置title中的Icon有幾種方法,介紹如下:
一種是直接在AndroidManifest.xml文件中設置android:icon屬性,這種方法簡單有效,應該算是我們最常用的設置Icon的方法:
<activity android:name=".activities.ImportExportSimCardActivity"
android:label="@string/exportsimcardtitle"
android:icon="@drawable/ic_activity_export_sim"
android:theme="@style/ImportExportSimCardActivityTheme" >
</activity>
但有些時候我們希望在代碼中可以動態更改Icon,或者說有可能兩個Activity其實共用一份代碼,需要看情況設置icon,如下面的情況:
於是另一種方法,在代碼中改變。可以使用 requestWindowFeature(Window.FEATURE_LEFT_ICON)和setFeatureDrawableResource()函數。
package com.android.importexport;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
public class Test01 extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_LEFT_ICON);
// requestWindowFeature()必須在setContentView()之前,否則會報錯;
// requestWindowFeature()操控的對象還有:
// 1.DEFAULT_FEATURES:系統默認狀態,一般不需要指定
// 2.FEATURE_CONTEXT_MENU:啓用ContextMenu,默認該項已啓用,一般無需指定
// 3.FEATURE_CUSTOM_TITLE:自定義標題。當需要自定義標題時必須指定。如:標題是一個按鈕時
// 4.FEATURE_INDETERMINATE_PROGRESS:不確定的進度
// 5.FEATURE_LEFT_ICON:標題欄左側的圖標
// 6.FEATURE_NO_TITLE:無標題
// 7.FEATURE_OPTIONS_PANEL:啓用“選項面板”功能,默認已啓用。
// 8.FEATURE_PROGRESS:進度指示器功能
// 9.FEATURE_RIGHT_ICON:標題欄右側的圖標
setContentView(R.layout.main);
setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, R.drawable.ic_activity_export_sim);
}
}
以上代碼可以解決icon改變的問題,但是在Android3.0 HoneyComb中ActionBar會無法獲取(getActionBar返回null),而且需要重新自定義title的格式了。無法使用HoneyComb自定義的風格,這個很雞肋。
於是可以考慮第三種方法,使用activity-alias,它可以快速指向到一個Activity,但同時又能各自定義不同的icon,實現如下:
<!-- <Kenny.z>> Activity for Export Contacts to SimCard -->
<activity android:name=".activities.ImportExportSimCardActivity"
android:label="@string/exportsimcardtitle"
android:icon="@drawable/ic_activity_export_sim"
android:theme="@style/ImportExportSimCardActivityTheme" >
</activity>
<activity-alias android:name="ExportSimCardActivity"
android:targetActivity=".activities.ImportExportSimCardActivity"
android:label="@string/exportsimcardtitle"
android:icon="@drawable/ic_activity_export_sim"
android:theme="@style/ImportExportSimCardActivityTheme">
<intent-filter>
<action android:name="com.android.contacts.action.EXPORT_TO_SIM" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity-alias>
<activity-alias android:name="ImportSimCardActivity"
android:targetActivity=".activities.ImportExportSimCardActivity"
android:label="@string/exportsimcardtitle"
android:icon="@drawable/ic_activity_import_sim"
android:theme="@style/ImportExportSimCardActivityTheme">
<intent-filter>
<action android:name="com.android.contacts.action.IMPORT_FROM_SIM" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity-alias>