2010-10-18 37 views
3

在我的清單文件中,我將應用程序名稱設置爲MyApp,將開始活動的名稱設置爲主菜單。Android:爲什麼將android應用程序的名稱當作開始活動的名稱?

<application android:theme="@style/theme" android:icon="@drawable/myicon" android:label="@string/app_name"> 
    <activity android:name=".MainMenu" 
       android:label="@string/mainmenu_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

當我在android的默認菜單屏幕中看到應用程序圖標時,顯示的名稱是Main Menu。爲什麼MyApp不是應用程序顯示的名稱?

回答

1

如果android:label設置爲activity那麼它的值取。它在activity中被省略,然後在application上設置android:label屬性。

你根本不可能有不同的標籤活動和應用爲您的應用程序與設定要在標籤中的活動一個發射器。我不太確定我完全理解你正在努力實現的目標。

10

因爲您的應用可以定義在啓動器中顯示的多個活動。所有具有此類意圖過濾器的活動:

<intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 

將出現在啓動器中,每個都有自己的標籤。事實上,如果您沒有在您的活動中定義標籤,則從應用程序繼承的基本上是商品。


而且,每一次活動都有自己的android:icon(再次,從<application>繼承商品)。有了這個屬性,您的兩個啓動器條目可以不僅具有不同的標籤,而且具有不同的圖標。


在更一般的筆記,甚至是「無主」的活動可以處理某些類型的事件,並在這些情況下,它們的標籤和圖標是相關的。例如,如果您的某個活動(與哪個活動無關)處理ACTION_SEND意圖(與大多數共享應用程序一樣 - 請參閱Facebook,Twitter,...),則只要用戶在任何中按下「共享」按鈕應用程序,可以完成某項活動的應用程序列表顯示給用戶(在這種情況下,這些應用程序可能是Facebook,Twitter和您的應用程序)。該列表將包含一個圖標和一個標籤(即Facebook的Facebook logo)。您的條目的顯示將由您接收<activity>定義的android:iconandroid:label屬性來決定,且僅當它沒有定義他們,他們會從你的<application>服用。

這允許您在不修改應用程序名稱的情況下輸入諸如「通過MyApp共享」之類的條目。或者,如果您的應用程序還具有處理ACTION_VIEW的活動,則該活動可能具有標籤「在MyApp中查看」。


挖掘更深,<intent-filter>元素可以有自己的標籤和圖標。基本上,Android選擇圖標和標籤來顯示,如下所示:

  • 如果<intent-filter>有,請選擇停止。
  • 如果<activity>有,請選擇,停止。
  • 挑選<application>中的一個。

這是有幫助的有兩種情況:

  1. 你不想改變你的活動的標籤/圖標:也許你想使用那些在其他地方,如標題欄(和你不不想讓你的標題欄說「通過MyApp分享」)
  2. 你有多個intent過濾器的活動。例如,您可以在同一活動中處理ACTION_SENDACTION_VIEW意圖。在這種情況下,您將爲該活動設置兩個意向過濾器,標籤爲「通過MyApp共享」和「在MyApp中查看」。

我希望我已經說清楚了,這些都是很基本的東西,可以是相當困難的,首先掌握,但在建築應用提供了極大的靈活性,並將它們與Android系統的集成和/或其他應用程序。


另外一點需要注意的是,你可以很容易地有沒有在啓動任何項目(由不具有上述意圖過濾器的任何活動)的應用程序。這些都是完全有效的應用程序,創建僅限付費應用程序(例如小部件)時,這是很好的做法。

1

在清單中,刪除啓動活動中的android:label屬性。然後,該活動將繼承應用程序的android:label中指定的名稱。