科技网站公司,做网站编辑需要学什么,推荐个网站免费的,合肥网站seo服务上一篇文章说了如何修改Android自带Launcher2的默认界面设置#xff08;http://www.cnblogs.com/mythou/p/3153880.html#xff09;。 今天主要是说说Launcher里面图标、布局、壁纸等的设置问题。毕竟我们一般修改Launcher#xff0c;这些都是需要修改的地方#xff0c;也是…上一篇文章说了如何修改Android自带Launcher2的默认界面设置http://www.cnblogs.com/mythou/p/3153880.html。 今天主要是说说Launcher里面图标、布局、壁纸等的设置问题。毕竟我们一般修改Launcher这些都是需要修改的地方也是比较容易修改的部分。按照效果图效果图在上一篇文章分开说明如何修改以及里面涉及的逻辑分析。 原创博文转载请标明出处http://www.cnblogs.com/mythou/p/3155692.html
1、图标大小和标题大小 Android原生图标大小都是通过配置文件设置配置文件路径是/res/values/dimens.xml 。需要注意的是values对应的文件夹很多因为是多国语言支持。而dimens.xml在默认的values文件夹下面或者values-land和values-port针对不同分辨率和平板类型需要根据你运行情况找对应的dimens修改如果需要使用多种分辨率最好所有dimens都修改好。下面是配置workspace的按钮属性配置。下面是针对values-land修改的cell大小。 //Edited by mythou
//http://www.cnblogs.com/mythou/!-- Workspace cell size --
dimen nameworkspace_cell_width_land88dp/dimen
dimen nameworkspace_cell_width_port96dp/dimen
dimen nameworkspace_cell_height_land88dp/dimen
dimen nameworkspace_cell_height_port96dp/dimen
dimen nameworkspace_width_gap_land32dp/dimen
dimen nameworkspace_width_gap_port0dp/dimen
dimen nameworkspace_height_gap_land0dp/dimen
dimen nameworkspace_height_gap_port24dp/dimen!-- Folders --
dimen namefolder_preview_size68dp/dimen
dimen namefolder_cell_width86dp/dimen
dimen namefolder_cell_height90dp/dimen
dimen namefolder_width_gap3dp/dimen
dimen namefolder_height_gap3dp/dimen
dimen namefolder_padding6dp/dimen2、Launcher 图标加入默认背景。 Launcher默认图标是各自应用程序设计的这也导致了界面图标看上去大小不同意有点凌乱的感觉。如果整个系统是自己修改的内置应用图标可以设置统一风格大小。如果是第三方程序就很难保证所以一个折中办法是给所有图标加入一个背景看上去风格一致。 Launcher图标的获取处理是在Utilities.java类里面我们可以从里面找到Bitmap createIconBitmap(Drawable icon, Context context) 方法。这个方法就是返回应用图标的。默认createIconBitmap里面有个加入五颜六色背景的方法不过是屏蔽了我们可以参考这个方法加入一个默认背景图。
//Edited by mythou
//http://www.cnblogs.com/mythou/static Bitmap createIconBitmap(Drawable icon, Context context) {//...............final int left (textureWidth-width) / 2;final int top (textureHeight-height) / 2;//测试用加入彩色背景边框if (false) {// draw a big box for the icon for debuggingcanvas.drawColor(sColors[sColorIndex]);if (sColorIndex sColors.length) sColorIndex 0;Paint debugPaint new Paint();debugPaint.setColor(0xffcccc00);canvas.drawRect(left, top, leftwidth, topheight, debugPaint);}//增加图标背景图片 OWLif (true) {Bitmap backBitmap BitmapFactory.decodeResource(context.getResources(),R.drawable.apical_icon_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);}}//................return bitmap;}}如图上面代码加入了 R.drawable.apical_icon_bg 一张默认的背景图作为背景这样所有图标看上去大小都是一致的。而且风格也比较接近。对于做系统应用的人来说体验比较好。如果需要一些比较炫的效果其实可以在这里给图标做倒影或者其他效果。 3、更换Launcher默认壁纸
Launcher默认的壁纸配置是放在framework下的res下面配置的图片也是放在framework下面。对于需要做独立Launcher的项目这个不能离开framework非常不方便。所以就在Launcher自身实现一个默认壁纸设置的功能。默认壁纸只能在Launcher第一次运行或者恢复默认设置时才需要设置显示。
因此我把默认壁纸反正设置放在Launcher.java类的onCreate()方法下的showFirstRunWorkspaceCling()执行。
showFirstRunWorkspaceCling()方法只有Launcher第一次启动或者清除数据恢复设置。才会运行。在showFirstRunWorkspaceCling()里面调用下面的方法
//Edited by mythou
//http://www.cnblogs.com/mythou/private void setDefaultWallPaper(){//修改默认背景 OWL test可以在Framework替换默认静态图default_wallpaperWallpaperManager mwallpaerManager;mwallpaerManager WallpaperManager.getInstance(this);try {mwallpaerManager.setResource(R.drawable.launcher_default_bg);} catch (IOException e) {Log.e(TAG, set default wallpaper error);e.printStackTrace();}}
Launcher的壁纸都是调用系统WallpaperManager操作的具体有兴趣可以查看源码。
android的静态壁纸默认是frameworks/base/core/res/res/drawable/default_wallpaper.jpg。如果是做系统的可以替换这张jpg图片也可以达到替换默认壁纸功能。
至于默认动态壁纸这个要修改/framework/base/core/res/res/values/config.xml 。
string namedefault_wallpaper_componentnull/string//把null修改为具体程序名如下string namedefault_wallpaper_component translatablefalse包名/动态壁纸服务名/string另外Launcher自身自带了一些默认壁纸反正Launcher的res/drawable文件夹下不同分辨率文件夹放了大小不一样。
这些默认壁纸在Launcher下values/wallpapers.xml下有配置。
//http://www.cnblogs.com/mythou/resourcesstring-array namewallpapers translatablefalseitemwallpaper_01/itemitemwallpaper_02/itemitemwallpaper_03/itemitemwallpaper_04/itemitemwallpaper_05/itemitemwallpaper_06/itemitemwallpaper_07/itemitemwallpaper_08/itemitemwallpaper_09/itemitemwallpaper_10/itemitemwallpaper_11/itemitemwallpaper_12/item/string-array
/resources不过系统默认最多是支持24张图片。可以修改壁纸名字或者新增壁纸都是可以的。壁纸名字跟图片名字一一对应。 4、壁纸设置过程 具体壁纸操作其实都是在WallpaperChooserDialogFragment这个Fragment里面实现
查找默认壁纸
//Edited by mythou
//http://www.cnblogs.com/mythou/private void findWallpapers() {mThumbs new ArrayListInteger(24);mImages new ArrayListInteger(24);final Resources resources getResources();// Context.getPackageName() may return the original package name,// com.android.launcher2; Resources needs the real package name,// com.android.launcher. So we ask Resources for what it thinks the// package name should be.final String packageName resources.getResourcePackageName(R.array.wallpapers);addWallpapers(resources, packageName, R.array.wallpapers);addWallpapers(resources, packageName, R.array.extra_wallpapers);}其中R.array.wallpapers 就是上面说的默认壁纸名字的xml配置文件。通过这个文件加载所有默认壁纸。除了wallpapers 还有一个extra_wallpapers。这两个功能原理是一样的。
设置壁纸比较简单跟我们设置默认壁纸一样
//Edited by mythou
//http://www.cnblogs.com/mythou/private void selectWallpaper(int position) {try {WallpaperManager wpm (WallpaperManager) getActivity().getSystemService(Context.WALLPAPER_SERVICE);wpm.setResource(mImages.get(position)); //设置壁纸Activity activity getActivity();activity.setResult(Activity.RESULT_OK);activity.finish();} catch (IOException e) {Log.e(TAG, Failed to set wallpaper: e);}}主要还是调用WallpaperManager的setResource方法。 今天就写到这里如果有发现哪里写错了请留言谢谢