Launcher3桌面开发-Launcher3 添加主题功能_android launch3 添加主题-程序员宅基地

技术标签: 程序员  移动互联网  it  Android  

Launcher3源码地址:Launcher3-master
[This tutorial was written by Ticoo]

前言

我们知道,Launcher图标的加载是在 IconCache 这个类上,协同一些工具类完成桌面图标的加载,源码里并没有主题功能的设计。所以在这里介绍一下主题设计的简单开发。

主题的构思

要添加主题功能我们得了解图标的加载,缓存等机制。还有,调研市面上的主题加载方式主要有两种方式,

1. APK包的方式,将主题资源放在Android工程上通过打包安装实现主题的替换
2. 指定格式的压缩包方式,如 .HW, .theme格式等等

在这基础之上我们可能还会有,主题的加密需求(目前也就想到这个)。

按上面的需求做出如下的设计:

graph LR

ThemeArchiveParser -->ThemeParser
ApkParser--> ThemeParser

定义接口 ThemeParser,用于解析主题压缩包和apk,让子类主题规则解析器ThemeArchiveParser 和 APK主题解析器 ApkParser 分别实现解析方法.

public interface ThemeParser<T extends ThemeEntity> {
    String TAG = ThemeParser.class.getSimpleName();
    /**
     * parse the theme archieve or apk or something else in future
     *
     * @param path
     * @return return the Theme wrap entity
     */
    T parse(String path);

}

当我们有新的规则,或者想适配市面上的某一款主题时,只要添加一个解析器来解析即可,而不用修改原本的解析去适配各种情况。
对于复杂类的创建我们有多种选择,这种情况下,我们就可以设计一个工厂模式 ThemeParseFactory 来创建特定的解析器。工厂模式是什么?出门左转就到了

然后将解析好的资源统一包装成 ThemeEntity,这个entity不外乎就是图标,壁纸,主题配置等等,大家自行设计即可,设计公司源码就不方便透露了,见谅。

解析器有了,我们就拿到资源了,在开发过程中还遇到几个坑,

1. 同一个应用有多个入口
2. 系统图标和三方图标的识别方式不一样。系统图标通常用 ic_music.png等方式命名,三方图标通常用包名来标识

由此,我们可以设计一个过滤器接口IconFilter,让子类系统图标过滤器和三方图标过滤器实现过滤方法。考虑到Launche里IconCache都是使用 ComponentKey 来标示图标,我们沿用即可。返回的String呢,是主题包里的图标命名。

public interface IconFilter {

    String TAG = IconFilter.class.getSimpleName(
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43887839/article/details/86596950

智能推荐

My conclusion on making a boost converter-程序员宅基地

文章浏览阅读232次。 After finishing a project on a boost converter, I actually think that there is something I can do better. Let me introduce you to my progress, at the moment to hardware extent by a function gen...

Android中/system/build.prop文件解读_op system/system/build.prop cp: error writing 'sys-程序员宅基地

文章浏览阅读3k次。在/system下的build.prop文件里,我们常看见以下语句。ro.ril.hsdpa.category = 10ro.ril.hsupa.category = 6ro.ril.hsxpa = 2ro.ril.enable.amr.wideband=1wifi.supplicant_scan_interval=45dalvik.vm.heapsize=24m _op system/system/build.prop cp: error writing 'system/system/build.prop': no

怪异的inet_ntoa函数---C/C++返回内部静态成员的陷阱_inet_ntoa 释放-程序员宅基地

文章浏览阅读600次。在我们用C/C++开 发的过程中,总是有一个问题会给我们带来苦恼。这个问题就是函数内和函数外代码需要通过一块内存来交互(比如,函数返回字符串),这个问题困扰和很多开发 人员。如果你的内存是在函数内栈上分配的,那么这个内存会随着函数的返回而被弹栈释放,所以,你一定要返回一块函数外部还有效的内存。这 是一个让无数人困扰的问题。如果你一不小心,你就很有可能在这个上面犯错误。当然目前有很多解决_inet_ntoa 释放

ZwQuerySystemInformation 查看系统进程信息_zwduplicateobject系统进程-程序员宅基地

文章浏览阅读580次。#include typedef enum _SYSTEM_INFORMATION_CLASS { SystemBasicInformation, SystemProcessorInformation, SystemPerformanceInformation, SystemTimeOfDayInformation, Syst_zwduplicateobject系统进程

深入理解Java虚拟机-第3章-垃圾收集器_从整体来看是基于“标记--整理”算法实现的收集器;从局部上来看是基于“复制”-程序员宅基地

文章浏览阅读118次。JVM的垃圾收集器经历了多代的发展,从单线程收集器到多线程收集器。一、背景垃圾回收器经历过多代的发展,从单线程到多线程,垃圾收集器的大家族产品如下,每一个连线表示可以组合使用。接下来大概分为几个阶段详细介绍下各个垃圾回收器的特点:阶段收集器名称区域并行/串行/并发算法优缺点适用场景第一阶段Serial新生代串行复制响应速度快单CPU环境下的Client模式Serial Old老年代串行标志-整理响应速度快单CPU环境下的Client._从整体来看是基于“标记--整理”算法实现的收集器;从局部上来看是基于“复制”

反弹shell-程序员宅基地

文章浏览阅读1.7w次,点赞19次,收藏92次。一、课时目标1.理解shell的概念2.理解交互式shell和非交互式shell的区别3.掌握反弹shell的原理和方法_反弹shell

随便推点

常用的分析管理工具方法【整理】_阿波罗根本原因分析-程序员宅基地

文章浏览阅读4.7w次,点赞17次,收藏73次。常用的分析管理工具方法常用的分析管理工具方法二八原则SWOT分析法鱼骨图分析法5M因素分析法5M1E分析法头脑风暴法名义群体法德尔菲法电子会议分析法几种决策方法比较PDCA循环5W1H分析法5W2H分析法5W2H1E法SMART原则任务分解法OGSM计划法_阿波罗根本原因分析

信号与系统matlab课设报告,信号与系统实验(信号与系统matlab实验报告)-程序员宅基地

文章浏览阅读502次。操作系统和微机接口技术的课程设计星期三班委才说,下周三就要叫答辩!!!!这几周还要连着期末考试.一点时间都没有!!操作系统的做了,微机接口技术的实在没有.2、掌握运用Matlab软件分析连续时间信号与系统的时域、频域特性;3、通过。二、实验内容1、构建一个包含若干个不同频率分量的周期连续信号(各分量频率自定)f(t),截取该信号的不同长度(注意截取长度应不小于最低频率分量的一个周期).n=0:15..._构建一个包含若干个不同频率分量的周期连续信号(各分量频率自定)f(t),截取该信号

Fastjson漏洞修复参考-程序员宅基地

文章浏览阅读6.5k次。Fastjson漏洞修复参考1. 漏洞背景​ Fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。Fastjson多处补丁修补出现纰漏,Fastjson在1.2.68版本以下,无需Autotype开启,或者可绕过autoType限制,攻击者即可通过精心构造的请求包在使用Fastjson的服务器上进行远程代码执行。受影响的版本:fastjson <=1.2.68fas_fastjson漏洞修复

C++ vector用法总结_vector<int>::iterator it = m_vec.begin()-程序员宅基地

文章浏览阅读394次,点赞2次,收藏3次。C++ 向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。 与string相同, vector 同属于STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 可以广义上认为是数组的增强版。_vector::iterator it = m_vec.begin()

Java学习路线&笔记链接_java 学习连-程序员宅基地

文章浏览阅读195次。Java学习路线&笔记链接????JAVASE数据库mysql(或oracle)JDBCWEB前端HTMLCSSJavaScriptJavaWeb(web后端)ServletJSPweb进阶AJAXjQueryJavaWeb项目实战SSM三大框架(额外可选学SSH)MyBatisSpringSpringMVC互联网分布式JAVASEJava语言的基础,是Java的最基本的库。基础语法加常用类库。数据库mysql(或oracle)数据库是所有程序员都需要学习的,因为不管是C语言,还是C++,_java 学习连

ESD二极管ESD05V56T-2L参数_esd二极管容值-程序员宅基地

文章浏览阅读358次。      ESD05V56T-2L的参数:  封装:SOT-563  电压:5V  钳位电压:9.8V  容值:3pF  功率:100W  ESD05V56T-2L的特性:  1、依据(tp=8/20μs)线路,峰值脉冲功率为100W  2、保护两个I/O线及电源线  3、适合高速接口的低电容  4、工作电压:5V  5、超小型封装要求小于2.9mm2的PCB面积  6、IEEE1394高速火线端口  6、IEC61000-4-2(ESD)±15_esd二极管容值