Android application display name

Android 应用的显示名称,在 AndroidManifest.xml 中进行修改。

AndroidManifest.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".LoginActivity"
android:label="@string/title_activity_login">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
...
</activity>
</application>

我们会很显然的认为,修改最外层的 android:label 即可,也就是修改 @string/app_name 的值。但经过实践会发现并不是这样的,Launcher 里显示的竟然是 @string/title_activity_login,也就是 Login Activity 的标题。

实际上,在 Launcher 中显示的应用名称,是被标记为首页面的 Activity 的标题。也就是被标记为:

AndroidManifest.xml
1
2
3
4
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

的 Activity。

那 application 标签的 android:label 属性是用来做什么的?它的确如它的名字一样,代表了应用的名称。在应用程序管理器中看到的名称,就是这个名称。但是这个名称并不是 Launcher 用的名称,所以用户在手机的桌面(应用程序列表)中,看到的不是这个名称。

这着实让人感到不可理解。自认为还是 iOS 的处理方式更科学--在 info.plist 文件中有一个属性 Bundle display name,在这里面存储了应用的显示名称,这是一个应用全局的设置。

那如果首页面 Activity 的标题,跟应用的显示名称不能保持一致,怎么办?那就在 AndroidManifest.xml 里,把首页面 Activity 的 label 设置成应用名称,然后在首页面 Activity 的 onCreate 里,用 setTitle 方法再把标题改掉就好了,如:

1
2
3
4
5
6
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle("登录");
setContentView(R.layout.activity_login);
...
}