您的位置:首页 > 移动开发

Launcher2修改--快捷界面和All Apps Icon大小和背景(二)

2015-11-04 10:04 513 查看
原创文章,转载注明出处:http://blog.csdn.net/deng0zhaotai/article/details/49633177

这里的修改均以横屏,分辨率为800*480为例,因为屏不同方向和分辨率使用的资源是不一样的,长按图标会出现格子,看到的布局,下面先来看下修改前后的对比图

修改前是4x4:



修改后是3x5:



修改的文件有layout-land/launcher.xml、values-land/dimens.xml、values/dimens.xml、Utilities.java

launcher.xml图标排列的修改

修改前:

<com.deng.launcher2.Workspace
android:id="@+id/workspace"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/qsb_bar_height"
android:paddingRight="@dimen/button_bar_height"
launcher:cellCountX="4"    //x方向图标个数
launcher:cellCountY="4"    //y方向图标个数
launcher:defaultScreen="2"
launcher:pageSpacing="@dimen/workspace_page_spacing"
launcher:scrollIndicatorPaddingLeft="@dimen/qsb_bar_height"
launcher:scrollIndicatorPaddingRight="@dimen/button_bar_height" >
修改后:

<com.deng.launcher2.Workspace
android:id="@+id/workspace"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/qsb_bar_height"
android:paddingRight="@dimen/button_bar_height"
launcher:cellCountX="5"   //x方向图标个数
launcher:cellCountY="3"   //y方向图标个数
launcher:defaultScreen="2"
launcher:pageSpacing="@dimen/workspace_page_spacing"
launcher:scrollIndicatorPaddingLeft="@dimen/qsb_bar_height"
launcher:scrollIndicatorPaddingRight="@dimen/button_bar_height" >
values-land/dimens.xml修改前:
<!-- Workspace 横屏  工作区存放图标位置的大小 不是图标的大小-->
<dimen name="workspace_cell_width">106dp</dimen>
<dimen name="workspace_cell_height">74dp</dimen>
<!-- hotseat的显示区域-->
<dimen name="hotseat_cell_width">64dp</dimen>
<dimen name="hotseat_cell_height">58dp</dimen>
修改后:

<!-- Workspace 横屏  工作区存放图标位置的大小 不是图标的大小-->
<dimen name="workspace_cell_width">100dp</dimen>
<dimen name="workspace_cell_height">100dp</dimen>
<!-- hotseat的显示区域-->
<dimen name="hotseat_cell_width">100dp</dimen>
<dimen name="hotseat_cell_height">100dp</dimen>
values/dimens.xml修改图标大小 修改前:
<dimen name="app_icon_size">48dp</dimen>
修改后:
<dimen name="app_icon_size">70dp</dimen>
Utilities.java文件添加图标背景图,在函数static Bitmap createIconBitmap(Drawable icon, Context context)上有这样一段代码

修改前:
// 测试用,加入sColors色彩背景边框
if (false) {
// draw a big box for the icon for debugging
canvas.drawColor(sColors[sColorIndex]);
if (++sColorIndex >= sColors.length)
sColorIndex = 0;
Paint debugPaint = new Paint();
debugPaint.setColor(0xffcccc00);
canvas.drawRect(left, top, left + width, top + height,
debugPaint);
}
修改后把if里的条件改为true:
// 测试用,加入sColors色彩背景边框
if (true) {
// draw a big box for the icon for debugging
canvas.drawColor(sColors[sColorIndex]);
if (++sColorIndex >= sColors.length)
sColorIndex = 0;
Paint debugPaint = new Paint();
debugPaint.setColor(0xffcccc00);
canvas.drawRect(left, top, left + width, top + height,
debugPaint);
}
如果要加入自己的背景图可以尝试以下代码代替以上代码
// 添加Launcher图标背景图片
if (false) {
Bitmap backBitmap = BitmapFactory.decodeResource(
context.getResources(), R.drawable.android_bg);
int backWidth = backBitmap.getWidth();
int backHeight = backBitmap.getHeight();
if (backWidth != sIconWidth || backHeight != sIconHeight) {
Matrix matrix = new Matrix();
matrix.postScale((float) sIconWidth / backWidth,
(float) sIconHeight / backHeight);
canvas.drawBitmap(Bitmap.createBitmap(backBitmap, 0, 0,
backWidth, backHeight, matrix, true), 0.0f, 0.0f,
null);
} else {
canvas.drawBitmap(backBitmap, 0.0f, 0.0f, null);
}
}
R.drawable.android_bg是你自己的背景图片

修改Hotseat的布局,要修改layout-land/hotseat.xml和Hotseat.java,修改前是1x5,修改后是1x3

修改前:
<com.deng.launcher2.Hotseat xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:launcher="http://schemas.android.com/apk/res/com.deng.launcher2"
android:background="@drawable/hotseat_bg_panel"
launcher:cellCountX="1"
launcher:cellCountY="5" >
Hotseat.java的常量
private static final int sAllAppsButtonRank = 2; // In the middle of the dock
修改后:

<com.deng.launcher2.Hotseat xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:launcher="http://schemas.android.com/apk/res/com.deng.launcher2"
android:background="@drawable/hotseat_bg_panel"
launcher:cellCountX="1"
launcher:cellCountY="3" >
Hotseat.java的常量
private static final int sAllAppsButtonRank = 1; // In the middle of the dock



修改了app_icon_size的值为70后,在Apps(应用程序)主菜单模块界面会出现显示不全现象



由于values-land/dimens.xml的区域大小为以下值

<!-- AppsCustomize -->
<dimen name="apps_customize_cell_width">80dp</dimen>
<!-- The width can be 76dp because we don't have B padding -->
<dimen name="apps_customize_cell_height">76dp</dimen>
<dimen name="apps_customize_pageLayoutWidthGap">-1dp</dimen>
<dimen name="apps_customize_pageLayoutHeightGap">-1dp</dimen>
<dimen name="apps_customize_pageLayoutPaddingTop">5dp</dimen>
<dimen name="apps_customize_pageLayoutPaddingBottom">5dp</dimen>
<dimen name="apps_customize_pageLayoutPaddingLeft">5dp</dimen>
<dimen name="apps_customize_pageLayoutPaddingRight">5dp</dimen>
修改为:
<!-- AppsCustomize -->
<dimen name="apps_customize_cell_width">100dp</dimen>
<!-- The width can be 76dp because we don't have B padding -->
<dimen name="apps_customize_cell_height">100dp</dimen>
<dimen name="apps_customize_pageLayoutWidthGap">-1dp</dimen>
<dimen name="apps_customize_pageLayoutHeightGap">-1dp</dimen>
<dimen name="apps_customize_pageLayoutPaddingTop">10dp</dimen>
<dimen name="apps_customize_pageLayoutPaddingBottom">10dp</dimen>
<dimen name="apps_customize_pageLayoutPaddingLeft">10dp</dimen>
<dimen name="apps_customize_pageLayoutPaddingRight">10dp</dimen>



AppsCustomizePagedView上的排列是动态计算出来的,根据屏幕的大小和以上配置文件的设置,计算出每一页显示几行几列,主要在AppsCustomizePagedView.java、PagedView.java这两个类中计算,感兴趣的可以看下AppsCustomizePagedView.java类的onDataReady(int width, int height)方法。

Launcher的修改已经迈出第一步,后续会慢慢进行深入的修改

修改后的源码下载:http://pan.baidu.com/s/1o6isndK
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息