android+动态更改app图标,Android开发:如何动态更换APP图标
在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图标相关推荐
- android 动态更改包名,Gradle多渠道打包(动态设定App名称,应用图标,替换常量,更改包名,变更渠道)...
// 多渠道/多环境 的不同配置 productFlavors { dev { // 每个环境包名不同 applicationId "com.lyl.dev" // 动态添加 st ...
- android应用更改系统语言,android app根据系统语言设置应用语言
在不同的 value 文件夹下(例如 value .value-en.values-zh-rTW 文件夹)添加不同语言的 string.xml 文件 中文的string.xml文件翻译成英文的stri ...
- android程序更改pdf文件格式,Android根据pdf模板生成pdf文件
1 public voidFillPdfTemplate(String id) {2 android.icu.text.SimpleDateFormat simpleDateFormat = 3 ne ...
- 开发安卓app游戏_电竞直播APP软件定制开发,游戏直播APP开发方案
近年来,电子竞技产业发展迅速,配套产业链日趋繁荣,不仅使一大批职业玩家获得可观的收入,而且还带动了视频解说.游戏直播.代练陪玩等周边市场的发展.现在游戏生态的规模也在逐渐形成.游戏.展览.竞赛.IP文 ...
- android开发兼职app,基于Android的大学生兼职APP的设计与实现.docx
基于Android的大学生兼职APP的设 计与实现 弓I 言(In troduction) 就业是民生的问题的根源,要想推动实现高质量高品质的就业,必 须关注大学毕业生,了解大学生的就业形势,做岀相应 ...
- 开发安卓app游戏_「安卓APP开发流程」安卓APP如何开发的?
21世纪,智能手机走进了人们的生活,现在的智能手机的操作系统基本分为两种,一种是IOS系统(苹果系统).安卓系统,其中,安卓系统是开源的,所以很多品牌商会讲安卓包装成自己的系统,但核心还是一样的,都是 ...
- 安卓app开发方案_「安卓APP开发流程」安卓APP如何开发的?
21世纪,智能手机走进了人们的生活,现在的智能手机的操作系统基本分为两种,一种是IOS系统(苹果系统).安卓系统,其中,安卓系统是开源的,所以很多品牌商会讲安卓包装成自己的系统,但核心还是一样的,都是 ...
- Hybird APP (混合开发)简介
写了几个 APP,最初是打算用纯 Native 的,可是我自身的 Android.IOS 知识并不能支撑我用纯 Native 构建项目,可项目又迫在眉睫.还好有前辈指点了一下,可以采用 Hybrid ...
- android studio 库项目管理,在Android Studio中将现有项目转换为库项目
在模块的applicationId文件中(如果使用模块,则不是根项目!),只需替换: apply plugin: 'com.android.application' // or, if you're ...
- 租车app都有哪些,租车app都有哪些功能
类似神州租车app开发,类似神州租车app开发多少钱,类似神州租车app贴牌开发,租车app开发哪家公司好,租车app都有哪些,租车平台定制开发,租车APP开发,租车APP平台开发,租车服务平台小程序 ...
最新文章
- Android笔记(adb命令--reboot loader)
- 三维曲面matlab程序,用matlab画三维曲面图 - 程序语言 - 小木虫 - 学术 科研 互动社区...
- python 画三维函数图-Python之Numpy:二元函数绘制/三维数据可视化/3D
- 数学图形之罗马曲面(RomanSurface)
- Python 3.X 练习集100题 02
- python画图视频_如何在视频文件的第一帧上画图,然后继续显示整个视频
- OpenGL 平行粒子的实例
- OpenStack运维面试(1)
- PHP算法学习(6) 单向链表 实现栈
- date时区 es logstash_elastic date时区问题解决办法
- 每日一测4(装箱与拆箱)
- 关于SQL EXPRESS 2005的连接问题
- js控制页面滑动加载
- Node.js 学习笔记 - 学习《深入浅出Node.js》-朴灵
- 利率市场化改革 增大银行风险管理挑战
- 架构设计——ID生成器
- MATLAB画圆时却显示椭圆?一个命令解决问题!
- Vue相关开源项目库汇总(转)
- java基本语法实验体会_实验一 Java 开发环境及基本语法
- catia二次开发:文件视图,exe,窗口切换,隐藏罗盘复位,按名称找对象,newfrom,登录,状态栏, 类型名,显示,不弹提示,workbench,不可视,部分更新,导出展开结构树,换行,元素存在