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

相关文章

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Python使用date模块进行日期处理的终极指南

《Python使用date模块进行日期处理的终极指南》在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能... 目录引言一、date模块的核心功能1.1 日期表示1.2 日期计算1.3 日期比较二、六大常用方法详

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Linux虚拟机不显示IP地址的解决方法(亲测有效)

《Linux虚拟机不显示IP地址的解决方法(亲测有效)》本文主要介绍了通过VMware新装的Linux系统没有IP地址的解决方法,主要步骤包括:关闭虚拟机、打开VM虚拟网络编辑器、还原VMnet8或修... 目录前言步骤0.问题情况1.关闭虚拟机2.China编程打开VM虚拟网络编辑器3.1 方法一:点击还原VM

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效