本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点

在 Android 中动态更改应用图标和名称并不是一个常见的需求,并且由于 Android 系统的限制,这样的操作也较为复杂。不过,通过一些技巧和配置,还是可以实现这些功能。下面是详细的步骤和示例代码。

一. 动态更改应用图标:

1. 使用多个活动别名(Activity Alias): Android 不允许直接改变应用图标,但是你可以在 AndroidManifest.xml 中声明多个活动别名,每个别名使用不同的图标和名称。

例如,你可以这样定义多个活动别名:

<activity
    android:name=".MainActivity">
    <!-- Default icon and label -->
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<!-- Alias for first icon and label -->
<activity-alias
    android:name=".MainActivityAlias1"
    android:enabled="false"
    android:icon="@drawable/icon1"
    android:label="@string/app_name1"
    android:targetActivity=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity-alias>

<!-- Alias for second icon and label -->
<activity-alias
    android:name=".MainActivityAlias2"
    android:enabled="false"
    android:icon="@drawable/icon2"
    android:label="@string/app_name2"
    android:targetActivity=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity-alias>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.

2. 启用/禁用活动别名: 然后你需要编写代码来动态启用和禁用这些活动别名,从而达到改变应用图标和名称的目的。

示例代码:

fun enableComponent(componentName: String) {
    val pm = applicationContext.packageManager
    pm.setComponentEnabledSetting(
        ComponentName(applicationContext.packageName, componentName),
        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
        PackageManager.DONT_KILL_APP
    )
}

fun disableComponent(componentName: String) {
    val pm = applicationContext.packageManager
    pm.setComponentEnabledSetting(
        ComponentName(applicationContext.packageName, componentName),
        PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
        PackageManager.DONT_KILL_APP
    )
}

fun updateIconAndLabel(aliasToEnable: String) {
    // Disable all aliases first
    disableComponent("com.example.app.MainActivityAlias1")
    disableComponent("com.example.app.MainActivityAlias2")

    // Enable the desired alias
    enableComponent(aliasToEnable)
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.

调用方法:

updateIconAndLabel("com.example.app.MainActivityAlias1")  // 更改为第一套图标和名称
updateIconAndLabel("com.example.app.MainActivityAlias2")  // 更改为第二套图标和名称
  • 1.
  • 2.
二. 动态更改应用名称:

应用的名称可以在运行时更改,但这里指的更多是局部UI上显示的名称,而不是应用的主名称。主名称(在启动器上显示的名称)只能通过上面的活动别名方法来更改。

更改应用中的其他文本:

可以动态更改应用中的任何 TextView 或其他 UI 组件上的文本,可以使用 Kotlin 的如下方法:

val appName: TextView = findViewById(R.id.textView)
appName.text = "新名称"
  • 1.
  • 2.
注意事项:

1、 权限: 确保您的应用具有足够的权限来更改组件状态。 2、 谨慎使用: 频繁更改应用图标和名称可能会使用户困惑,因此请谨慎使用这样的功能。

结论:

通过上述步骤和示例代码,您可以实现 Android 应用图标和名称的动态更改。这些操作虽然有些复杂和不常见,但通过活动别名的配置和程序代码的控制,您可以灵活地实现这些需求。


欢迎关注我的公众号 AntDream查看更多精彩文章!