在Android开发中,通常会有这样的需求,逢年过节UI的小伙伴们都会做出节日或活动相关的APP图标让我们更换,可是每次更换都要发版实现。那么,如何在不发版的情况下动态地更换我们的图标呢?本篇文章就来讲讲动态更换的方法。

原理:在Manifest文件中,使用标签为我们的启动Activity准备多个别名,拥有标签的activity指向启动Activity,每个拥有标签的Activity都可以单独设置一个icon,在程序中我们动态设置和的enabled属性来实现替换图标效果。

步骤:

在AndroidManifest.xml中添加标签,代码如下所示:

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

android:supportsRtl="true"

android:theme="@style/AppTheme">

android:name="RoundActivity"

android:enabled="false"

android:icon="@mipmap/ic_launcher_round"

android:targetActivity=".MainActivity">

这个标签需要注意的地方如下:

(1)android:name属性可以随意起。

(2)android:enabled属性要设为false,否则桌面会存在多个APP图标。

(3)android:icon属性设置为不同的图标。

(4)android:targetActivity属性要设为启动的Activity。

(5)添加那部分来使其作为启动的Activity。

我们在布局文件中创建两个按钮,用来切换不同的图标,代码如下:

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:id="@+id/btn_round_icon"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="切换圆形图标"/>

android:id="@+id/btn_primitive_icon"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="切换原始图标"/>

在Java代码中切换和的使能状态,代码如下:

private void setRoundIcon() {

PackageManager packageManager = getPackageManager();

packageManager.setComponentEnabledSetting(new ComponentName(this, getPackageName() +

".MainActivity"), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager

.DONT_KILL_APP);

packageManager.setComponentEnabledSetting(new ComponentName(this, getPackageName() +

".RoundActivity"), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager

.DONT_KILL_APP);

}

private void setPrimitiveIcon() {

PackageManager packageManager = getPackageManager();

packageManager.setComponentEnabledSetting(new ComponentName(this, getPackageName() +

".RoundActivity"), PackageManager.COMPONENT_ENABLED_STATE_DISABLED,

PackageManager.DONT_KILL_APP);

packageManager.setComponentEnabledSetting(new ComponentName(this, getPackageName() +

".MainActivity"), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager

.DONT_KILL_APP);

}

注意setComponentEnabledSetting()方法的第3个参数有两个值供选择:1(也就是PackageManager.DONT_KILL_APP)和0。这两种参数对应两种效果:当设为1时,当切换APP图标时,会有几秒钟的延迟,并且在延迟期间不能点击图标进入APP;当设为0时,当切换APP图标时,会立刻更换,但是应用会被强制退出并被清理掉。

存在的问题:

当启动的的enabled属性设为disabled时,Android Studio再次编译运行会出现如下错误:

错误提示

需要将的enabled属性设为enabled或者将APP卸载后才能编译运行。

在应用管理和应用详情页里App的图标一直是原来的,不会动态修改。

android+动态更改app图标,Android开发:如何动态更换APP图标相关推荐

  1. android 动态更改包名,Gradle多渠道打包(动态设定App名称,应用图标,替换常量,更改包名,变更渠道)...

    // 多渠道/多环境 的不同配置 productFlavors { dev { // 每个环境包名不同 applicationId "com.lyl.dev" // 动态添加 st ...

  2. android应用更改系统语言,android app根据系统语言设置应用语言

    在不同的 value 文件夹下(例如 value .value-en.values-zh-rTW 文件夹)添加不同语言的 string.xml 文件 中文的string.xml文件翻译成英文的stri ...

  3. android程序更改pdf文件格式,Android根据pdf模板生成pdf文件

    1 public voidFillPdfTemplate(String id) {2 android.icu.text.SimpleDateFormat simpleDateFormat = 3 ne ...

  4. 开发安卓app游戏_电竞直播APP软件定制开发,游戏直播APP开发方案

    近年来,电子竞技产业发展迅速,配套产业链日趋繁荣,不仅使一大批职业玩家获得可观的收入,而且还带动了视频解说.游戏直播.代练陪玩等周边市场的发展.现在游戏生态的规模也在逐渐形成.游戏.展览.竞赛.IP文 ...

  5. android开发兼职app,基于Android的大学生兼职APP的设计与实现.docx

    基于Android的大学生兼职APP的设 计与实现 弓I 言(In troduction) 就业是民生的问题的根源,要想推动实现高质量高品质的就业,必 须关注大学毕业生,了解大学生的就业形势,做岀相应 ...

  6. 开发安卓app游戏_「安卓APP开发流程」安卓APP如何开发的?

    21世纪,智能手机走进了人们的生活,现在的智能手机的操作系统基本分为两种,一种是IOS系统(苹果系统).安卓系统,其中,安卓系统是开源的,所以很多品牌商会讲安卓包装成自己的系统,但核心还是一样的,都是 ...

  7. 安卓app开发方案_「安卓APP开发流程」安卓APP如何开发的?

    21世纪,智能手机走进了人们的生活,现在的智能手机的操作系统基本分为两种,一种是IOS系统(苹果系统).安卓系统,其中,安卓系统是开源的,所以很多品牌商会讲安卓包装成自己的系统,但核心还是一样的,都是 ...

  8. Hybird APP (混合开发)简介

    写了几个 APP,最初是打算用纯 Native 的,可是我自身的 Android.IOS 知识并不能支撑我用纯 Native 构建项目,可项目又迫在眉睫.还好有前辈指点了一下,可以采用 Hybrid ...

  9. android studio 库项目管理,在Android Studio中将现有项目转换为库项目

    在模块的applicationId文件中(如果使用模块,则不是根项目!),只需替换: apply plugin: 'com.android.application' // or, if you're ...

  10. 租车app都有哪些,租车app都有哪些功能

    类似神州租车app开发,类似神州租车app开发多少钱,类似神州租车app贴牌开发,租车app开发哪家公司好,租车app都有哪些,租车平台定制开发,租车APP开发,租车APP平台开发,租车服务平台小程序 ...

最新文章

  1. Android笔记(adb命令--reboot loader)
  2. 三维曲面matlab程序,用matlab画三维曲面图 - 程序语言 - 小木虫 - 学术 科研 互动社区...
  3. python 画三维函数图-Python之Numpy:二元函数绘制/三维数据可视化/3D
  4. 数学图形之罗马曲面(RomanSurface)
  5. Python 3.X 练习集100题 02
  6. python画图视频_如何在视频文件的第一帧上画图,然后继续显示整个视频
  7. OpenGL 平行粒子的实例
  8. OpenStack运维面试(1)
  9. PHP算法学习(6) 单向链表 实现栈
  10. date时区 es logstash_elastic date时区问题解决办法
  11. 每日一测4(装箱与拆箱)
  12. 关于SQL EXPRESS 2005的连接问题
  13. js控制页面滑动加载
  14. Node.js 学习笔记 - 学习《深入浅出Node.js》-朴灵
  15. 利率市场化改革 增大银行风险管理挑战
  16. 架构设计——ID生成器
  17. MATLAB画圆时却显示椭圆?一个命令解决问题!
  18. Vue相关开源项目库汇总(转)
  19. java基本语法实验体会_实验一 Java 开发环境及基本语法
  20. catia二次开发:文件视图,exe,窗口切换,隐藏罗盘复位,按名称找对象,newfrom,登录,状态栏, 类型名,显示,不弹提示,workbench,不可视,部分更新,导出展开结构树,换行,元素存在

热门文章

  1. 【秒懂音视频开发】02_重识声音
  2. 安卓手机怎么一键转发别人的朋友圈
  3. 你眼中的单纯问题,却是别人的棘手问题
  4. 敌人的敌人是朋友的问题
  5. [转]中国式管理可以休矣
  6. 计算机话题作文,雅思话题作文范文:电脑与现代教育
  7. 【相机开发】相机采集、处理、显示多线程开发
  8. Gtk基础学习总结(二)
  9. PS--电影效果滤镜
  10. 计算机网络知识可视化,(完整版)可视化方法与技术