您的位置:首页 > 移动开发

动态修改App显示图标

2017-11-13 14:17 537 查看
我们可以在应用中集成多个图标,到特定节日显示特殊的图标,好比双11显示打折的图标,双11后显示普通图标。

让我们来看下如何代码设置:

首先在AndroidManifest.xml文件中添加多个图标,主要使用activity-alias标签

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="test.tlkg.com.icotest">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">

<!--去掉<category android:name="android.intent.category.LAUNCHER" />这句-->
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
<!--默认显示的图标enabled=true-->
<activity-alias
android:name=".icon_tag"
android:enabled="true"
android:icon="@mipmap/ic_launcher"
android:label="图标"
android:targetActivity=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<!--代码设置要更改的图标,enabled=false,这里可以根据需要添加多个activity-alias节点-->
<!--这个为了演示只添加了两个图标,一个默认的,一个代码设置要更改的-->
<activity-alias
android:name=".icon_tag_new"
android:enabled="false"
android:icon="@mipmap/ic_launcher_round"
android:label="图标"
android:targetActivity=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
</application>

</manifest>


2 . 代码更改图标,这个主要通过设置enable属性来改变要显示的图标,示例代码如下:(Kotlin版)

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btn.setOnClickListener {
switchIco(1)
}
}

/**
* 切换桌面图标,1普通,2圆形
*/
fun switchIco(useIco: Int = 1) {
try {
val icon_tag = "test.tlkg.com.icotest.icon_tag"
val ico_tagnew = "test.tlkg.com.icotest.icon_tag_new"
val pm = packageManager
val componentName = ComponentName(baseContext, icon_tag)
val componentNamenew = ComponentName(baseContext, ico_tagnew)
if (useIco == 1) {
pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP)
pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, Packa
4000
geManager.DONT_KILL_APP)
} else if (useIco == 2) {
pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP)
pm.setComponentEnabledSetting(componentNamenew, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
}


这里要重要启动下App,可以从最近任务列表中移除重新打开。

有兴趣的同学试下哈~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息