简介

最近遇到了这么个需求,动态改变桌面图标,这个功能本身还是比较常见,比如天猫等app在各种剁手节的时候基本都会换个应景的图标以及整体风格,而这里只讨论图标的更换,查阅了一些资料,这里就介绍一下我认为最便捷的方式。

原理

原理其实很简单就是利用标签,控制其enabled属性,用来显示与否。

实现

实现之前,先简单描述一下需求:

App默认图标是Android机器人图标,然后还有另外两个图标icon_1和icon_2,通过按钮点击设置变成哪个图标,也有一个还原图标的功能。

实现步骤:

增加对应个数的标签

增加布局喝对应点击事件

代码控制显示哪个图标

接下来就一步一步的来实现:

1、增加对应个数的标签

这里还有两个图标,所以我们再增加两个标签,这个标签是在AndroidManifest.xml的标签内的,和标签同一级,其中一个代码如下:

android:name=".MainActivity1"

android:enabled="false"

android:icon="@mipmap/icon_1"

android:label="@string/app_name"

android:targetActivity=".MainActivity">

复制代码

这里需要注意一下他的这几个属性:

属性

含义

name

可任意取值,只要能保证是唯一标识即可,为了方便管理建议有规律一些

targetActivity

这个属性的值就是代表指向的是哪个Activity,而这个标签本身代表是该Activity的别名,记得指向的Activity要在该标签之前申明,否则可能运行不起来

icon

指的是该别名对应的应用图标

label

指的是该别名对应的应用名字

enabled

默认是true,true就会显示在桌面上,这里为了保证桌面只显示一个图标,则中的属性都是false,而在之后代码中动态控制这个属性,来显示和隐藏对应的图标

至于,这个和Activity的没有区别,其实完全可以把当作Activity组件来看,只是不是真身,是别名罢了。

另一个也是同理的,这里就不介绍了。

2、增加布局和对应点击事件

这一点其实没啥好说的,布局就是一个竖直方向的LinearLayout,里边有三个Button,通过其onClick属性,设置点击相应的方法,当然你也可以获取到这些Button再设置OnClickListener,代码比较简单,文末有Demo地址。

3、代码控制显示哪个图标

这一步其实也就是调用PackageManager中的一个方法即可,方法如下:

private void changeLauncher(String name) {

PackageManager pm = getPackageManager();

//隐藏之前显示的桌面组件

pm.setComponentEnabledSetting(getComponentName(),

PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

//显示新的桌面组件

pm.setComponentEnabledSetting(new ComponentName(MainActivity.this, name),

PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

}

复制代码

都是调用PackageManager的setComponentEnabledSetting方法,第一个参数表示操作的组件是哪个,第二个参数表示显示还是隐藏,第三个组件表示是否关掉app。

TIPS

1、这里有个技巧,建议不要直接点了切换按钮就去执行切换图标,因为执行切换图标之后始终会关闭这次打开的app,所以我们 可以点击之后先记录下要换成哪个图标,在程序退出的时候再切换图标,这样一来就不会关闭该app了。

2、细心的朋友会发现,在调试阶段,我改了这个app的启动图标,再执行代码启动,发现启动不了,其实这是因为代码中默认启动那个组件和修改后的那个组件不一致了,所以就启动不了,而对于程序的更新和安装是没有影响的。

3、这种方式动态更换图标,更换的时候不是,切换之后就马上生效的,据我观察应该和手机性能有关,在执行该操作之后,会在几秒钟之内改变图标,但是对于普通桌面图标的改变,该缺点还是可以接受的,毕竟不是用户手动触发,也不影响体验。

DEMO

感谢

android动态修改桌面图标,Android动态更换桌面图标相关推荐

  1. Python桌面自定义---实现定时更换桌面壁纸

    Python桌面自定义---实现定时更换桌面壁纸 1 效果 2 获取大量壁纸 3 Python代码实现定时更换壁纸 1 效果   大致效果如下,设置过定时更换壁纸的应该都知道是啥场景. 2 获取大量壁 ...

  2. android代码修改excel文件格式,Android实现类似execel的表格 能回显并能修改表格内容的方法...

    如下所示: 自定义实现一个水平滚动控件HorizontalScrollView package com.example.view; import android.content.Context; im ...

  3. android studio修改配置文件夹(.android .gradle .AndroidStudio)位置

    Android studio安装之后一般默认在c:/user/userid(*****)/;(比如:c:/user/xiaohong/)其他软件在安装中要创建缓存文件夹,那么也会在这个目录创建,比如N ...

  4. html 动态修改列名,FineUI之动态增加列及修改列的实现

    在FineUI的官方示例中有类似的实现.示例中实现了动态增加列,但有时我们可能需要动态修改列.先来看效果图 下面是代码实现 DynamicGrid.aspx DynamicGrid.aspx.cs u ...

  5. 动态修改el-input样式;动态修改elmentUI元素样式;css变量

    场景:正常我们动态修改div元素的样式,使用:style和:class即可:但是我们想要动态修改element的组件样式时候,例如el-input字体颜色,由于el-input的样式嵌套很深,我们需要 ...

  6. Android全局修改字体大小,Android 仿微信全局字体大小调整

    image 目录 一.前言 二.效果预览 三.实现步骤 1.自定义字体调整控件 2.滑动按钮改变当前页面预览字体大小 3.返回时,保存放大倍数并重启应用 4.初始化应用时配置字体放大倍数. 四.Dem ...

  7. win8计算机桌面字体,win8.1桌面字体颜色_Win8更换桌面主题(壁纸、窗口颜色)的操作步骤_win8个性化颜色...

    Win7.Win8系统中都内置个性化选项,用户可自定义设置桌面壁纸.窗口颜色等,也可以更换桌面主题,那么Win8系统如何更换主题呢?下面小编就为大家介绍下Win8电脑更换桌面主题的具体操作. Win8 ...

  8. android code修改border颜色,Android自定义TextView边框颜色(动态改变边框颜色以及字体颜色)...

    最近写了一个带边框的TextView,因为项目中有许多地方需要用到一个带边框的TextView,而且需要根据不同的状态显示不同的边框颜色,当时的第一反应就是用shape做,但后来转念一想这要需要定义多 ...

  9. 安卓动态修改html代码,android WebView-动态修改网页内容

    做个笔记以备后用!!! 在webview开发过程中有时候遇到用webView需要加载某网站,网页中有些logo,文字什么的需要隐藏掉. 解决思路共两部就搞定: 1:通过webview为网页注入我们需要 ...

  10. Vue动态修改网页浏览器标签的标题和图标

    情景:平台功能支持修改系统的名称和图标,图标同步展示为浏览器页签的图标 效果: 1. main.js Vue.directive('title', {inserted: function (el, b ...

最新文章

  1. python对文件的读写正确操作方式
  2. CloudHub概述
  3. c#,Halcon_HObject双向转换HImage
  4. 百度:请叫我卡车新势力
  5. server sql 判断是否是当天_判断sql server 是否在开启服务状态
  6. 使用Maven构建Dubbo服务的可运行jar包
  7. MySQL数据库管理(二)单机环境下MySQL Cluster的安装
  8. java中1代表什么,java中iamp; =(i-1)的含义是什么
  9. 【POJ 3614 Sunscreen】贪心 优先级队列
  10. 6. C 语言预处理
  11. ArcGIS API for JavaScript 加载水经注离线地图
  12. 学生HTML个人网页作业作品 基于HTML+CSS+JavaScript明星个人主页(15页)
  13. 网点分布图怎么做,用地图制作客户分布图
  14. 【STM32H7教程】第70章 STM32H7的内部Flash基础知识和HAL库API
  15. 读书笔记--交流电的瞬时值和有效值
  16. Git如何上传代码到远程仓库(GiteeGithub)
  17. 时间序列预测之移动平均法(MA)
  18. 数据分析案例-基于PCA主成分分析法对葡萄酒数据进行分析
  19. Connection to the other side was lost in a non-clean fashion
  20. 抓包工具 - Wireshark(详细介绍与TCP三次握手数据分析)

热门文章

  1. Linux入侵检查工具,linux系统入侵检测工具chkrootkit
  2. CVPR2021投稿要求
  3. Win10 IE浏览器无法打开HTTPS网站的解决方法--win10专业版
  4. Adversarial Generation of Continuous Images 阅读笔记
  5. 关于typora的天坑
  6. 大神面试心法教你沉着应对大小公司的笔试面试
  7. 【区块链108将】区块链追溯产品起源,让每一个产品都是放心产品
  8. 游戏数据库数据管理系统开发体会
  9. c 语言 登陆窗口界面,c/c++语言实现登陆界面
  10. sql同比环比 简单示例