Android动态改变Icon总结笔记
来源:互联网 发布:51单片机编程软件 编辑:程序博客网 时间:2024/06/06 13:22
Android 应用图标动态改变
前提: 程序开发中,有很多需要改变应用桌面图标的场景,比如日历程序图标显示日期、时钟程序图标显示时间信息、社交程序图标显示未读消息数等等, 但是厂商为保证桌面Launcher程序的流畅性,一般都不会对外开放相关接口,使得这类需求的开发变得很困难,本文的期望 就是能够为这类开发提供一些方案。
通过动态改变程序入口组件来改变桌面图标
配置Activity图标
Android应用程序可以通过在manifest清单文件中配置Activity组件,来设置程序的入口, icon即是桌面显示的图标,默认情况下参数enable为true,会在桌面显示该图标,若设置enable=false,即该图标不会在桌面显示。
<activity android:name=".MainActivity" android:enabled="false" android:icon="@mipmap/icon_1"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
一个程序可以配置多个category为LAUNCHER的activity,从而达到显示多个应用图标的效果,每个图标都是程序的一个入口,点击后显示的界面都不一样。
给Activity设置引用
Android可以配置多个activity-alias标签 来为指定activity设置多个引用,每个activity-alias标签都可以icon、label属性来设置图标、标题等信息,同Activity一样,category配置为LAUNCHER时, 且enable为true时,会在系统桌面生成图标。targetActivity指定点击图标后响应的Activity。 name属性为activity-alias唯一标识,java代码中通过该参数获得该activity引用。
如下配置中,为Activity设置两个引用,又因为只有withIcon1的enable为true,因此,只有该图标会显示在应用程序列表中。<activity android:name=".MainActivity" android:enabled="false"></activity><activity-alias android:name="mainActivity.withIcon1" android:enabled="true" android:icon="@mipmap/icon_1" android:targetActivity=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter></activity-alias><activity-alias android:name="mainActivity.withIcon2" android:enabled="false" android:icon="@mipmap/icon_2" android:targetActivity=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter></activity-alias>
动态禁用或启用组件
在java代码中,可以通过ClassName来判断当前处于哪一个组件, 如下代码, 获得的mClassName即是在清单文件为activity或activity-alias配置的name属性。
String mClassName = getComponentName().getClassName();
得到程序的PackageManager,禁止或启动的组件,即是重新设置activity或activity-alias的enable属性。组件禁止后该图标从应用程序列表消失,组件启动后应用程序列表显示该图标。
PackageManager pm = getPackageManager();pm.setComponentEnabledSetting(getComponentName(), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);pm.setComponentEnabledSetting(new ComponentName(this, className), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
总结
通过预先设置activity的引用,可以简单的显示动态改变程序显示图标的作用, 但是这样做有两个问题:
- 程序能有显示icon数量有限,而且必须写死在程序中,不能真正的动态改变
- 程序禁止或启动组件的操作进行后,需等待10秒左右的时间(具体时间跟当前系统Launcher策略有关),桌面Launcher才会更新图标
(未完待续。。。)
PS: 这是改变图标的第一钟方法,在部分系统中, 厂商可能会提供相关接口,来部分改变图标,如在图标上显示未读消息数等,有待研究
- Android动态改变Icon总结笔记
- Android动态改变app在桌面上的icon
- Android动态改变App在Launcher里面的icon
- Flex动态改变按钮图标(icon)
- ionic之动态改变icon大小
- android应用icon动态更换
- Android notification动态设置网络图片icon
- Android launcher动态Icon的实现方法
- android动态修改app桌面icon
- Android Launcher 动态icon【时钟】【日历】
- android动态修改app桌面icon
- Android launcher动态Icon的实现方法
- android动态修改app桌面icon
- Android动态改变布局
- Android动态改变布局
- Android动态改变布局
- Android动态改变布局
- android 动态改变字体大小
- 行状元素和块状元素
- JavaScript学习之Array(数组对象)方法介绍
- count(*)和count(列)
- Android控件EditText中文本光标位置的设置
- c++ 取运行目录
- Android动态改变Icon总结笔记
- java中的泛型
- 登陆页面实现保存帐号密码功能
- 运行时数据区
- HDU 5651
- 使用 buck 打包 Android( 使用OkBuck给Android Studio+gradle生成 buck 脚本)
- whl is not a supported wheel on this platform.
- 图像分辨率像素问题的理解
- 多线程方法记录