• 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相对应。

     

     

  • 相关阅读:
    烟草专卖生产企业许可证
    1-十四烷基-3-甲基咪唑六氟磷酸盐([C14MIm][PF6])修饰纳米SiO2二氧化硅(mg级瓶装)
    【无标题】
    1829. 每个查询的最大异或值
    面试题:computed watch data filter
    【C语言之排序】-------六大排序
    多元统计分析-----例8.1:今有14名学生的身高和体重数据,做相关图以显示相关变量间的关系。
    Vue | Vue.js 实现过渡动画
    Java全栈进阶
    设计模式 23 访问者模式
  • 原文地址:https://blog.csdn.net/zenmela2011/article/details/126183963