• 21天学习挑战赛--第三天打卡(动态更换app图标)


    1.图标设置

    app图标一般都是设置在Android manifest.xml文件里application的icon属性里,如下:

    Android manifest.xml:

        android:icon="mipmap/ic_launcher"

        ……>

    淘宝、微博都有默认图标,但是到了重大节日或者有重要活动的时候,它们的图标会相应的发生改变,这是怎么做到的呢?

     

    2.动态改变图标

    实现的关键是使用activity-alias,配置多个相同activity。

    实现流程为:在Manifest文件中使用activity-alias标签准备多个Activity入口,每个activity都指向入口Activity,并且为每个拥有activity-alias标签的activity设置单独的icon和应用名,最后调用SystemService 服务kill掉launcher,并执行launcher的重启操作。

    ①首先,修改AndroidManifest.xml文件:

        package="com.demo.test">

       

       

       

            android:allowBackup="true"

            android:icon="@mipmap/default_logo"

            android:label="@string/app_name"

            android:roundIcon="@mipmap/default_logo"

            ……>

           ...

           

           

                android:name="com.demo.test.default"

                android:targetActivity=".MainActivity"

                android:label="@string/app_name"

                android:enabled="false"

                android:icon="@mipmap/default_logo"

                android:exported="true">

               

                   

                   

               

           

            

           

           

                android:name="com.demo.test.special"

                android:targetActivity=".MainActivity"

                android:label="@string/special"

                android:enabled="false"

                android:icon="@mipmap/special_logo"

                android:exported="true">

               

                   

                   

               

           

            ... 

       

    其中涉及到的属性:

    android:name:注册的组件名字,启动组件的名称。

    android:enabled:是否启用这个组件,即是否显示这个入口。

    android:icon:图标

    android:label:名称

    android:targetActivity:默认的activity没有这个属性,指定目标activity,与默认的activity中的name属性是一样的,需要有相应的java类文件。

    注:

    (1)activity-alias需要在activity下面,enabled为false,否则桌面会有两个图标

    (2)activity-alias下的name随意,但targetActivity需要是上面activity的name

    (3)在这配置要换的icon和label

    (4)android:exported都需要为true。默认为true

    ②在MainActivity触发Logo图标更换逻辑:

    private void changeIcon(String name){

        PackageManager pm = getPackageManager();

        pm.setComponentEnabledSetting( getComponentName(),PackageManager.COMPO NENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

        pm.setComponentEnabledSetting(new ComponentName(this, name), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

        restart(pm);

    }

    注意changeIcon()方法中的name字符串需要和AndroidManifest.xml文件中的的name相对应。

     

     

  • 相关阅读:
    Qemu 启动无法交互的处理方法
    嵌入式Linux应用开发-基础知识-第三章 LED原理图-GPIO及操作
    金仓数据库KingbaseES安全指南--6.2. 身份验证相关的配置文件
    Linux CentOS7 vim多文件与多窗口操作
    如何使用SQL系列 之 如何在SQL中使用数学表达式和聚合函数
    基于SSH开发简单的学校失物招领系统
    C++11 智能指针 已完成未发布
    辅助驾驶功能开发-功能规范篇(16)-2-领航辅助系统NAP-HMI人机交互
    管理多个Instagram帐户防关联小技巧大分享
    多路由复用页面组件问题
  • 原文地址:https://blog.csdn.net/zenmela2011/article/details/126183963