更改 Android 启动器图标,如 Instagram/Todoist

问题描述 投票:0回答:1

在 Instagram 周年纪念日,用户可以更改应用程序图标。尽管此功能不再可用,但 Todoist 对此功能有类似的工作实现。

我研究了如何实现这一目标并运行了第二个答案:更改应用程序图标

但是这个解决方案似乎有我不想要的缺点。其中一些在注释下列出:博客更改应用程序图标。 此外,通过使用此解决方案,每次我选择带有活动别名的另一个图标时,我的应用程序都会被终止,并且我无法使应用程序保持活动状态。

Todoist应用程序的行为:首先您必须激活“动态更改应用程序图标”-关闭应用程序的功能。然后再次启动应用程序后,该功能就可用了,您可以根据需要更改应用程序图标。

据我所知,Instagram 的实施甚至不需要重新启动,但我对此表示同意,因为这个解决方案会比现在现有的解决方案更好。

那么 Todoist 或 Instagram 方法是如何运作的以及实施方式会是什么样子?

android dynamic icons instagram launcher
1个回答
0
投票

感谢Mike M.

我找到了一种解决方法,可以在不关闭应用程序的情况下更改图标。您只需创建另一个配置活动并将主活动的启动模式设置为单实例即可。

<activity
        android:name=".config.ConfigActivity"
        android:exported="true"
        android:enabled="true"
        android:icon="@mipmap/ic_light"
        android:screenOrientation="sensorPortrait"
        tools:ignore="DiscouragedApi,LockedOrientationActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".MainActivity"
        android:exported="true"
        android:enabled="false"
        android:icon="@mipmap/ic_light_round"
        android:launchMode="singleInstance"
        android:screenOrientation="sensorPortrait"
        tools:ignore="DiscouragedApi,LockedOrientationActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity-alias
        android:name=".MainActivityDark"
        android:exported="true"
        android:enabled="false"
        android:icon="@mipmap/ic_dark_round"
        android:targetActivity=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity-alias>

在此之后你必须做一些操作:

· 在 onCreate() 中启用主要活动并启动一些额外的活动 - 布尔值:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    this.enableMainActivity()
    startActivity(
        Intent(this, MainActivity::class.java).apply {
            putExtra("is_config", true)
        }
    )
}

· 在 onCreate() 中禁用配置活动:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    val isConfigNeeded = intent.getBooleanExtra("is_config", false)
    if (isConfigNeeded) {
        disableConfigActivity()
    }

    // UI
}

应用程序将开始关闭,但不用担心。唯一的一步就在眼前:

· 在配置活动的 onDestroy() 中启动主活动:

override fun onDestroy() {
    super.onDestroy()
    startActivity(Intent(this, MainActivity::class.java))
}

感谢您的关注! Github 仓库:xo-tymoshenko/iconchange

© www.soinside.com 2019 - 2024. All rights reserved.