Android:为什么将Android应用程序的名称作为起始活动的名称?

时间:2010-10-18 10:08:24

标签: android

在我的清单文件中,我已将应用程序名称指定为MyApp,并将启动活动的名称指定为主菜单。

<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的默认菜单屏幕中看到应用程序图标时,显示的名称是主菜单。为什么MyApp不是应用程序显示的名称?

3 个答案:

答案 0 :(得分: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 logo Facebook)。您的参赛作品的显示将由您的接收android:icon定义的android:label<activity>属性决定,并且只有在未定义这些属性时,才会从您的{{1}中获取}。

这使您可以在不修改应用程序名称的情况下输入“通过MyApp共享”等条目。或者,如果您的应用程序还有一个处理<application>的活动,则该活动可能具有标签“在MyApp中查看”。


更深入地挖掘ACTION_VIEW元素可以拥有自己的标签和图标。基本上,Android选择图标和标签来显示如下:

  • 如果<intent-filter>有,请选择,停止。
  • 如果<intent-filter>有,请选择,停止。
  • 选择<activity>中的一个。

这在两种情况下很有用:

  1. 您不想更改活动的标签/图标:也许您想在标题栏等其他地方使用它们(并且您不希望标题栏说“通过MyApp共享”)
  2. 您有多个意图过滤器的活动。例如,您可以在同一活动中同时处理<application>ACTION_SEND个意图。在这种情况下,您将为该活动设置两个意图过滤器,其标签为“通过MyApp共享”和“在MyApp中查看”。

  3. 我希望我已经明确表示,这些是非常基本的事情,起初可能很难掌握,但这为构建应用程序并将它们与Android系统和/或其他应用程序集成提供了极大的灵活性。


    另一件需要注意的事情是,您可以轻松拥有一个在启动器中没有任何条目的应用程序(通过上面提到的intent过滤器没有任何活动)。这些是完全有效的应用程序,在创建仅限服务的应用程序(例如小部件)时,这是一种很好的做法。

答案 1 :(得分:1)

如果为android:label设置activity,则会获取其值。对activity省略它,然后取代android:label上设置的application属性。

您根本无法为活动和应用程序设置不同的标签,因为您的应用程序为您的活动设置了一个启动器,并带有您设置的标签。我不太确定我完全理解你想要实现的目标。

答案 2 :(得分:1)

在清单中,删除启动活动的android:label属性。然后,活动将继承应用程序android:label中指定的名称。