Android:以编程方式更改App Label

时间:2011-09-30 06:00:46

标签: java android manifest

如何更改应用程序标签以更改android中java代码显示的应用程序名称? 我指的是:

<application android:icon="@drawable/icon" android:label="@string/app_name">
Android Manifest中的

有没有办法更新 strings.xml 文件中的值?

8 个答案:

答案 0 :(得分:48)

在活动中,我试过

this.setTitle("your text");

它有效。我希望这是一个常见的解决方案

答案 1 :(得分:13)

目前还不可能。它是AndroidManifest.xml文件中的固定字符串,无法在运行时更改。

答案 2 :(得分:10)

使用<activity-alias>,您可以将应用程序图标和名称更改为由您预定义的少数。

Mannifest.xml

中创建此类配置
<activity android:name="package.name.MainActivity"
 android:screenOrientation="portrait"
 android:label="@string/app_name"
 android:theme="@style/CustomTheme"
 android:launchMode="singleTask">
  <intent-filter>
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>

<activity-alias android:label="@string/app_name_default" 
 android:icon="@drawable/icon_default" 
 android:name=".MainActivity-Default"
 android:enabled="true"
 android:targetActivity=".MainActivity">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>   
</activity-alias>

<activity-alias android:label="@string/app_name_flavor_one" 
 android:icon="@drawable/icon_flavor_one" 
 android:name=".MainActivity-Flavor-One"
 android:enabled="false"
 android:targetActivity=".MainActivity">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>   
</activity-alias>

现在您可以在这两个别名之间切换,因此我们将更改应用程序图标或/和名称。 要从Default切换到Flavor-One,请使用此代码。

 getPackageManager().setComponentEnabledSetting(
    new ComponentName("package.name", "package.name.MainActivity-Flavor-One"), 
        PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
 getPackageManager().setComponentEnabledSetting(
    new ComponentName("package.name", "package.name.MainActivity-Default"), 
        PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

请注意,您必须跟踪一次只能启用一个别名

答案 3 :(得分:3)

在Launcher活动中,在setContentView()写这个之前,

setTitle("Your Title");

我不知道它是怎么可能的,但它确实有效。

答案 4 :(得分:1)

应用程序的android:label是一个固定的资源引用者。

但是这个引用者下的字符串可能有多个值,具体取决于配置限定符名称(values-en,-large,-land等),具体取决于 Providing Alternative Resources

答案 5 :(得分:0)

对任何感兴趣的人:Android How to change the application title 但目前尚不清楚它是否会更改“应用程序标签”(即应用程序列表中图标的名称)或仅更改窗口标题。

答案 6 :(得分:0)

如果您要扩展固件,您可以通过更改IconCache.java文件并使其显示带有内部电话值的字符串来实现此目的。

例如,如果您希望SIM工具包显示运营商的名称,您可以这样做。

但是对于常规应用程序,正如人们所说的那样,它目前还不具备。

答案 7 :(得分:0)

史密斯先生说,这是不可能的,

但您可以使用多个ActivityAlias,可以动态启用/禁用多个ActivityAlias并指向相同的targetActivity。因此,请为应用名称创建选择器 - 让用户选择一个并通过packageManager启用ComponentName componentName = new ComponentName(context, context.getPackageName() + "." + aliasName); context.getPackageManager().setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

COMPONENT_ENABLED_STATE_DISABLED

要隐藏旧别名,请使用带有标记的相同代码:npm install css-loader style-loader less-loader

您还可以添加在启用别名后直接向主启动器添加快捷方式的可能性。这里有很多关于母猪的描述。