先上结论
修改packages/apps/Launcher3/res/xml/device_profiles.xml里
launcher:iconImageSize="24"
launcher:iconTextSize="24"
这样的地方即可
追源码过程
网上大部分都说改dimens.xml里的iconsize,改了编译之后发现不管用,于是自己找
现在packages/apps/找到Launcher3
这个相关内容是控制桌面显示的
进入
src/com/android/launcher3
找icon相关,发现一个IconProvider.java
打开之后虽然有一个
public Drawable getIcon(LauncherActivityInfo info, int iconDpi, boolean flattenDrawable)
看名字是返回Icon的,但是只定义了icon的密度(dpi)
于是再找,有一个icons文件夹,打开发现有四个文件
ComponentWithLabel.java
IconCache.java
LauncherActivtiyCachingLogic.java
LauncherIcons.java
看名字定义icons的有一个LauncherIcons.java
搜索size关键字,发现了方法有两处有iconBitmapSize,
一处是构造函数,另一处是在其obtain方法里,源代码如下
packages/apps/Launcher3/src/com/android/launcher3/icons/LauncherIcons.java
private LauncherIcons(Context context, int fillResIconDpi, int iconBitmapSize, int poolId,
boolean shapeDetection) {
/*第一处*/ super(context, fillResIconDpi,iconBitmapSize, shapeDetection);
mPoolId = poolId;
}
/**
* Return a new Message instance from the global pool. Allows us to
* avoid allocating new objects in many cases.
*/
public static LauncherIcons obtain(Context context, boolean shapeDetection) {
int poolId;
synchronized (sPoolSync) {
if (sPool != null) {
LauncherIcons m = sPool;
sPool = m.next;
m.next = null;
return m;
}
poolId = sPoolId;
}
InvariantDeviceProfile idp = LauncherAppState.getIDP(context);
/*第二处*/ return new LauncherIcons(context, idp.fillResIconDpi, idp.iconBitmapSize, poolId,
shapeDetection);
}
我们只需关注给iconBitmapSize赋值的地方
而其中Obtain方法里的iconBitmapSize是直接使用已经被定义过的idp.iconBitmapSize
所以我们只需关注其构造函数里的iconBitmapSize,即第一处地方
直接调用父类的构造方法
public class LauncherIcons extends BaseIconFactory implements AutoCloseable {
查找BaseIconFacory,
/packages/apps/Launcher3/iconloaderlib/src/com/android/launcher3/icons/BaseIconFactory.java
查找iconBitmapSize
protected final int mIconBitmapSize;
查找mIconBitmapSize赋值的地方,只有在其构造函数的地方赋值
protected BaseIconFactory(Context context, int fillResIconDpi, int iconBitmapSize,
boolean shapeDetection) {
.....
mIconBitmapSize = iconBitmapSize;
.....
}
所以到目前,知道了要为设置icon的size,只有在创建BaseIconFactory或者其子类LauncherIcons的时候进行修改
于是在/packages/apps/Launcher3下
进行查询命令
grep -nir "BaseIconFactory"
grep -nir "LauncherIcons"
两条命令分别查询,发现new对象的地方只有一个
src/com/android/launcher3/graphics/LauncherPreviewRenderer.java:101:
new BaseIconFactory(context, mIdp.fillResIconDpi, mIdp.iconBitmapSize) { };
Binary file .git/index matches
打开LauncherPreviewRenderer.java 到101行
private final InvariantDeviceProfile mIdp;
...
BaseIconFactory iconFactory =
new BaseIconFactory(context, mIdp.fillResIconDpi, mIdp.iconBitmapSize) { };
发现图标的大小来自mIdp.iconBitmapSize
而mIdp是InvariantDeviceProfile 类;
这时就该去找InvariantDeviceProfile.java了
Launcher3/src/com/android/launcher3/InvariantDeviceProfile.java
private static final class DisplayOption {
private final GridOption grid;
...
private float iconSize;
...
TypedArray a = context.obtainStyledAttributes(
attrs, R.styleable.ProfileDisplayOption);
...
iconSize = a.getFloat(R.styleable.ProfileDisplayOption_iconImageSize, 0);
iconTextSize = a.getFloat(R.styleable.ProfileDisplayOption_iconTextSize, 0);
}
过滤掉无用信息后,发现是通过R.styleable.ProfileDisplayOption_iconImageSize来赋值的
用的是styleable
找到res/values/attrs.xml这个文件发现其定义为
<attr name="iconImageSize" format="float" />
<attr name="iconTextSize" format="float" />
在res下查找其赋值的地方
grep -nir "iconTextSize"
grep -nir "iconImageSize"
找到
xml/device_profiles.xml:34: launcher:iconTextSize="13.0"
xml/device_profiles.xml:42: launcher:iconTextSize="13.0"
xml/device_profiles.xml:61: launcher:iconTextSize="13.0"
xml/device_profiles.xml:69: launcher:iconTextSize="13.0"
xml/device_profiles.xml:77: launcher:iconTextSize="13.0"
xml/device_profiles.xml:85: launcher:iconTextSize="13.0"
xml/device_profiles.xml:93: launcher:iconTextSize="13.0"
xml/device_profiles.xml:112: launcher:iconTextSize="14.4"
xml/device_profiles.xml:120: launcher:iconTextSize="13.0"
xml/device_profiles.xml:33: launcher:iconImageSize="24"
xml/device_profiles.xml:41: launcher:iconImageSize="24"
xml/device_profiles.xml:60: launcher:iconImageSize="24"
xml/device_profiles.xml:68: launcher:iconImageSize="24"
xml/device_profiles.xml:76: launcher:iconImageSize="24"
xml/device_profiles.xml:84: launcher:iconImageSize="24"
xml/device_profiles.xml:92: launcher:iconImageSize="24"
xml/device_profiles.xml:111: launcher:iconImageSize="24"
xml/device_profiles.xml:119: launcher:iconImageSize="24"
则修改Launcher3/res/xml/device_profiles.xml
里定义图标和字体大小的地方就可以了.