android launcher 日历图标显示日期

2024-03-26 19:08

本文主要是介绍android launcher 日历图标显示日期,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

看到iphone上的日历图标上的数字会随着日期的变化而变化,最近在android平台上也研究了 一下,实现方法如下:

直接上源码

在launcher里改的

首先,在IconCache.java文件中,找到方法private CacheEntry cacheLocked(ComponentName componentName, ResolveInfo info,
            HashMap<Object, CharSequence> labelCache)
在entry.icon = Utilities.createIconBitmap(icon, mContext); 这个位置修改:

<span style="font-size:14px;">if(info.activityInfo.packageName.equals("com.android.calendar")){entry.icon = Utilities.createCalendarIconBitmap(icon, mContext);}else{if (index >= 0) {entry.icon = Utilities.createIconBitmap(icon, mContext);} else {entry.icon = Utilities.createIconBitmap(/* SPRD: Feature 253522, Remove the application drawer view @{ */// getFullResIcon(info), mContext);icon, mContext, true);}}</span>


改后源码如下:

<span style="font-size:14px;">private CacheEntry cacheLocked(ComponentName componentName, ResolveInfo info,HashMap<Object, CharSequence> labelCache) {CacheEntry entry = mCache.get(componentName);if (entry == null) {entry = new CacheEntry();mCache.put(componentName, entry);ComponentName key = LauncherModel.getComponentNameFromResolveInfo(info);if (labelCache != null && labelCache.containsKey(key)) {entry.title = labelCache.get(key).toString();} else {entry.title = info.loadLabel(mPackageManager).toString();if (labelCache != null) {labelCache.put(key, entry.title);}}if (entry.title == null) {entry.title = info.activityInfo.name;}/* SPRD: Fix bug 281291, remove icon_top for theme defaut icon @{ *//* SPRD: UUI theme : system icons @{ */Drawable icon;/* SPRD: Fix bug294355, add just to ThemeManager. @{ */int index = sysIndexOf(componentName.getClassName());Log.i("jxt", "index:"+index+",Name:"+componentName.getClassName());icon = getFullResIcon(info);//changed by  leo if(info.activityInfo.packageName.equals("com.android.calendar")){entry.icon = Utilities.createCalendarIconBitmap(icon, mContext);}else{if (index >= 0) {entry.icon = Utilities.createIconBitmap(icon, mContext);} else {entry.icon = Utilities.createIconBitmap(/* SPRD: Feature 253522, Remove the application drawer view @{ */// getFullResIcon(info), mContext);icon, mContext, true);}}/* @} *//* @} *//* @} */}return entry;}</span>

接下来修改Utilities.java

添加一个函数:


<span style="font-size:14px;">static Bitmap createCalendarIconBitmap(Drawable icon, Context context){Bitmap calendarIcon = createIconBitmap(icon,context);String dayString  = String.valueOf(Calendar.getInstance().get(Calendar.DAY_OF_MONTH));synchronized (sCanvas) {final Canvas canvas = sCanvas;canvas.setBitmap(calendarIcon);final float mDensity = context.getResources().getDisplayMetrics().density;Paint mDatePaint = new Paint();mDatePaint.setTypeface(Typeface.DEFAULT_BOLD);mDatePaint.setTextSize((int)30F * mDensity);mDatePaint.setColor(0xff000000);mDatePaint.setAntiAlias(true);Rect rect = new Rect();mDatePaint.getTextBounds(dayString,0,dayString.length(),rect);int hoffset = 20;int width1 = rect.right - rect.left;int height1 = rect.bottom - rect.top;int width2 = calendarIcon.getWidth();int height2 = calendarIcon.getHeight() + hoffset;canvas.drawText(dayString,(width2 - width1)/2 - rect.left,(height2 - height1)/2 - rect.top,mDatePaint);canvas.setBitmap(null);return calendarIcon;}}</span>
再修改LauncherModel.java文件:

在onReceive()方法中添加如下代码:

<span style="font-size:14px;">//changed by leo}else if(Intent.ACTION_DATE_CHANGED.equals(action) ||Intent.ACTION_TIME_CHANGED.equals(action) ||Intent.ACTION_TIMEZONE_CHANGED.equals(action)){final String packageName = "com.android.calendar";enqueuePackageUpdated(new PackageUpdatedTask(PackageUpdatedTask.OP_UPDATE, new String[]{packageName}));}</span>
最后修改LauncherApplication.java文件,如果是launcher3的源码,则修改LauncherAppState.java文件

我这里修改的是

LauncherAppState.java

在构造函数 private LauncherAppState()中添加:

<span style="font-size:14px;"> //changed by leofilter.addAction(Intent.ACTION_TIME_CHANGED);filter.addAction(Intent.ACTION_DATE_CHANGED);filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);</span>

修改后的样式为:

<span style="font-size:14px;"> // Register intent receiversIntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);filter.addAction(Intent.ACTION_PACKAGE_REMOVED);filter.addAction(Intent.ACTION_PACKAGE_CHANGED);filter.addDataScheme("package");sContext.registerReceiver(mModel, filter);filter = new IntentFilter();filter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE);filter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE);filter.addAction(Intent.ACTION_LOCALE_CHANGED);filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);//changed by leofilter.addAction(Intent.ACTION_TIME_CHANGED);filter.addAction(Intent.ACTION_DATE_CHANGED);filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);sContext.registerReceiver(mModel, filter);
</span>
当然, 这样是不能运行看到效果的,要将该导入的包都导入 ,然后再单编译launcher模块,push到手机里,就能看到日历图标上显示当前日期了。

      今天看到好多人修改后引起了问题,我把源码提取出来了,放在资源里,需要的可以去下载查看,请点击链接


这篇关于android launcher 日历图标显示日期的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/849551

相关文章

Java日期类详解(最新推荐)

《Java日期类详解(最新推荐)》早期版本主要使用java.util.Date、java.util.Calendar等类,Java8及以后引入了新的日期和时间API(JSR310),包含在ja... 目录旧的日期时间API新的日期时间 API(Java 8+)获取时间戳时间计算与其他日期时间类型的转换Dur

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

idea中project的显示问题及解决

《idea中project的显示问题及解决》:本文主要介绍idea中project的显示问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录idea中project的显示问题清除配置重China编程新生成配置总结idea中project的显示问题新建空的pr

Python日期和时间完全指南与实战

《Python日期和时间完全指南与实战》在软件开发领域,‌日期时间处理‌是贯穿系统设计全生命周期的重要基础能力,本文将深入解析Python日期时间的‌七大核心模块‌,通过‌企业级代码案例‌揭示最佳实践... 目录一、背景与核心价值二、核心模块详解与实战2.1 datetime模块四剑客2.2 时区处理黄金法

Java进行日期解析与格式化的实现代码

《Java进行日期解析与格式化的实现代码》使用Java搭配ApacheCommonsLang3和Natty库,可以实现灵活高效的日期解析与格式化,本文将通过相关示例为大家讲讲具体的实践操作,需要的可以... 目录一、背景二、依赖介绍1. Apache Commons Lang32. Natty三、核心实现代

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

Android 实现一个隐私弹窗功能

《Android实现一个隐私弹窗功能》:本文主要介绍Android实现一个隐私弹窗功能,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 效果图如下:1. 设置同意、退出、点击用户协议、点击隐私协议的函数参数2. 《用户协议》、《隐私政策》设置成可点击的,且颜色要区分出来res/l

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整