在平板上android系统默认的桌面图标太小了,需要将其放大。之前在launcher中做了简单的图片放大,带

来了图标模糊的问题,重新研究源码寻求解决办法。

(1)解决思路是先找到应用程序的图标等信息是怎么获取的。这就需要学习PackageManager的相关源码。

PackageManger类包含以下功能:

安装,卸载应用

查询permission相干信息

查询Application相干信息(application,activity,receiver,service,provider及响应属性等)从

AndroidManifest.xml获取的这些的信息

查询已安装应用

增长,删除permission

清除用户数据、缓存,代码段

可以通过getPackageManager()方法获得。

此类是一个抽象类。它的实现过程可以参考http://blog.csdn.net/ljsbuct/article/details/6636433中的分析。

PackageItemInfo类

说明: AndroidManifest.xml文件中所有节点的基类,提供了这些节点的基本信息:a label、icon、 meta-data。

常用字段:

public int icon  获得该资源图片在R文件中的值 (对应于android:icon属性)

public int labelRes 获得该label在R文件中的值(对应于android:label属性)

public String name   获得该节点的name值 (对应于android:name属性)

public String packagename   获得该应用程序的包名 (对应于android:packagename属性)

常用方法:

Drawable  loadIcon(PackageManager pm) 获得当前应用程序的图像

CharSequence  loadLabel(PackageManager pm)     获得当前应用程序的label

PackageItemInfo类中的这些方法时利用PackageManager中的方法实现的。

PackageItemInfo类并不直接使用,而是由子类继承然后调用相应方法。例如ActivityInfo类、ServiceInfo类和ApplicationInfo类等。

(2)我们来具体看下Launcher中时如何获取应用程序icon的:

在IconCache.java中的

private CacheEntry cacheLocked(ComponentName componentName, ResolveInfo info) {

.....

entry.icon = Utilities.createIconBitmap(

info.activityInfo.loadIcon(mPackageManager), mContext);

}

也就是调用ActivityInfo类的loadIcon来获取drawable型的icon信息。

接着我们看Utilities中的createIconBitmap方法,其中有

if (sourceWidth > 0 && sourceWidth > 0) {

// There are intrinsic sizes.

if (width < sourceWidth || height < sourceHeight) {

// It's too big, scale it down.

final float ratio = (float) sourceWidth / sourceHeight;

if (sourceWidth > sourceHeight) {

height = (int) (width / ratio);

} else if (sourceHeight > sourceWidth) {

width = (int) (height * ratio);

}

} else if (sourceWidth < width && sourceHeight < height) {

// It's small, use the size they gave us.

width = sourceWidth;

height = sourceHeight;

}

}

这段代码对icon大小处理,如果icon是固有尺寸大于我们定义的尺寸就进行裁剪,如果小于我们定义的尺寸就采用其固有尺寸。

而尺寸是在这里定义的:

sIconWidth = sIconHeight = (int) resources.getDimension(android.R.dimen.app_icon_size);

定义这个app_icon_size是在\frameworks\base\core\res\res\values中的dimens.xml中。

android 图标点击变大,使android桌面图标变大相关推荐

  1. 【Android 性能优化】应用启动优化 ( 安卓应用启动分析 | Launcher 应用简介 | Launcher 应用源码简介 | Launcher 应用快捷方式图标点击方法分析 )

    文章目录 一. Launcher 应用简介 二. Launcher 应用源码简介 三. Launcher 图标点击方法分析 一. Launcher 应用简介 Launcher 应用 : Android ...

  2. 加载网络图片Glide+圆角 fragment的动态添加 底部图标点击选中

    一.加载网络图片Glide+圆角 1.添加网络请求. <!-- 添加权限 --><uses-permission android:name="android.permiss ...

  3. html引导蒙层,web开发中实现图标点击态蒙层

    原标题:web开发中实现图标点击态蒙层 webapp开发中经常需要加入点击二态,即用户点击(tap)页面某个部分时该部分的样式进行相应的变化来相应用户的点击操作,这样能够带来更好的用户体验,今天我们要 ...

  4. 删除AppData后出现任务栏图标点击没反应的解决方法

    删除AppDate后出现任务栏图标点击没反应的解决方法 本人因为C盘满了,一时手贱把c盘里面用户文件的AppData删除了,结果出现有些软件打不开,任务栏点击没反应.游览器插件丢失.软件的环境变量消失 ...

  5. centos桌面图标变小_如何使Windows桌面图标变大或变小

    centos桌面图标变小 Windows lets you choose large, medium, or small desktop icons. But did you know many ot ...

  6. badboy录制网站出现css样式混乱,网页的图标点击没反应

    本人在测试web工作过程中,遇到了标题一样的问题.苦恼很久也没有找到原因.后面自己摸索,发现了问题所在! badboy安装是2.2.5版本:ie最新版本: 原因:首次安装badboy的时候,所默认的浏 ...

  7. win10微软图标点击无反应_win10系统任务栏开始菜单等系统图标点击无反应的解决方法...

    很多小伙伴都遇到过win10系统任务栏开始菜单等系统图标点击无反应的情况,想必大家都遇到过win10系统任务栏开始菜单等系统图标点击无反应的情况吧,那么应该怎么处理win10系统任务栏开始菜单等系统图 ...

  8. 计算机桌面图标如何变小,怎么把桌面图标变小,教您怎么把桌面图标变小

    最近有网友跟小编反应,不习惯电脑系统默认的大图标,图标面积太大,不美观,此时,如果我们能通过一种方法将桌面的图标变小,将会让我们打开程序成为一件十分容易的事情.那么,如果将桌面的图标变小呢,下面,小编 ...

  9. 计算机桌面图标方向变了,Win7系统桌面图标变了怎么办?

    有时候我们开启电脑后会遇到一个问题,那就是电脑桌面上的图标变成了未知的图片,原来正常的图标被替换成了空白的图案,即使重启电脑也没用,这是怎么回事呢?其实这是一个比较常见的问题,下面给大家介绍几种方法来 ...

最新文章

  1. WPF-002 下拉列表的简单实现
  2. 重塑云上的 Java 语言
  3. 帝国整站PHP源码,帝国cms 诗词整站源码
  4. 解释器和编译器的区别
  5. Linux系统下部署Tomcat
  6. java线程初始方法三种_Java 多线程 三种实现方式
  7. ctf实验平台-成绩单
  8. 今天,终于又有时间更新飞鸽传书了。
  9. SpringBoot如何直接访问HTML页面
  10. 软件测试工程师-缺陷报告
  11. 1gb 云服务器 和2gb的区别_(12)虚拟主机/VPS/云主机/服务器有什么区别?
  12. Chaarshanbegaan at Cafebazaar 水题
  13. 不同类别游戏音效的特点
  14. MQ消息队列常用命令
  15. 基于无线发射接收物体远离报警器的设计
  16. 入门小白不到三个月就学会了用maya软件如何制作动画
  17. 机器学习岗位面试总结:简历应该关注的5个重点
  18. 哈工大计算机考研复试考纲,哈尔滨工业大学考研复试大纲
  19. codeforces 1526C1 Potions (Easy Version)
  20. 2022年AI领域有哪些重要突破?(附报告全文)

热门文章

  1. 在python中如何比较两个float类型的数据是否相等
  2. Linux最小体积mysql安装_Linux下安装MySQL以及一些小坑
  3. linux驱动双摄像头,详解linux 摄像头驱动编写
  4. erdas叠加显示_ERDAS操作技巧
  5. 在php中可以使用几种方法定义数组,PHP中数组定义的几种方法
  6. C/C++ 为什么#ifndef 头文件 要用大写加下划线?(这就是一种约定俗成的规范)
  7. 如何在C语言里调用opencv C++函数?
  8. 如何添加交叉编译工具链(toolchain)到环境变量?(--sysroot路径)(新:ubuntu交叉编译工具链环境变量的配置)
  9. python 函数参数 (必选参数、默认参数、可选参数、关键字参数)
  10. Kafka常用命令大全