Android应用程序名称显示为活动名称

And*_*der 22 android

我已经查看了应用程序的清单,在apps启动器下它显示为活动名称而不是应用程序名称?为什么是这样.我有另一个应用程序,当我安装它时,应用程序中的每个活动有5个条目,当应该只有一个名称,应用程序的名称?因此,当我去发布时,它在启动列表中有5个相同名称的应用程序.这些以应用程序命名,但每个活动都有一个.这可能是什么原因?

Pat*_*ick 40

以上接受的答案是错误的.它说,

该名称来自应用程序标记上的android:label属性

这不是真的.以下面的代码为例.

<activity android:name="ApiDemos" android:label="@string/app_name">
     <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.DEFAULT" />
         <category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

在此代码中,启动器中显示的应用程序名称由标记中的android:label属性设置,而activity不是application标记,如上面接受的答案所示.

要更正上面接受的响应,启动器中图标下显示的名称来自android:label入口点活动activity标签中的属性(包含DEFAULTLAUNCHER类别的活动标签),除非您没有在那里指定它在哪种情况下它来自在android:label该属性application的标签.

您的第一个问题可以通过更改android:label入口点活动标记中的属性来解决.

  • 多么奇怪的行为.使用活动的活动名称和启动器的应用程序名称似乎更合乎逻辑.你觉得它有什么意义吗? (4认同)
  • 这样,app devs可以拥有多个启动器图标(以及相关的入口点活动),并且每个启动器图标都可以有不同的名称.你可以通过在清单中的多个活动标签中包含以下代码来实现这一点:`<intent-filter> <action android:name ="android.intent.action.MAIN"/> <category android:name ="android .intent.category.LAUNCHER"/> </ intent-filter>`并在每个活动标签中添加`android:label ="@ string/app_name"`. (2认同)
  • @Patrick那么如何为应用程序名称中分隔的条目活动添加标签?如果我愿意只有一项主要活动? (2认同)

Bri*_*ley 13

对于第一个问题,您应该知道,如果在启动时没有标签,Activity则名称来自android:label应用程序标记的属性中的默认标签集:

<application android:name="ApiDemosApplication"
   android:label="@string/activity_sample_code"
   android:icon="@drawable/app_sample_code">
Run Code Online (Sandbox Code Playgroud)

如果Activity有标签,则使用该标签.

对于第二个问题,在清单中,很可能您的所有活动都指定了一个具有android.intent.category.LAUNCHER操作的intent过滤器.例如:

<activity android:name="ApiDemos">
     <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.DEFAULT" />
         <category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

如果在所有活动上都有这样的intent-filter标记,则应该在除Activity启动时要启动的所有活动之外的所有活动上取出intent过滤器标记.如果这Activity有标签,那么它将与启动器图标一起显示.

截至API 27+的2019/01/03,似乎LAUNCHER将启动具有该类别的第一个活动,并且其标签将与应用程序图标相关联,因此可能不一定非必要删除所有冗余意图过滤器,但无论如何我都会这样做,因为它会导致混乱.


Dan*_*rza 7

使用不同的应用程序名称(应用程序图标下显示的名称)和点击应用程序图标时正在启动的活动的不同名称的一种方法是在活动的onCreate()方法中显式设置不同的字符串, 像这样:

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  // Do your thing
  // ... bla bla bla

  getActionBar().setTitle(R.string.activity_title);
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

  • 如果您使用支持库,请使用 [`getSupportActionBar()`](/sf/answers/1939868941/) 而不是 `getActionBar()` (2认同)