日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android之Launcher分析和修改2——Icon修改、界面布局调整、壁纸设置

發(fā)布時間:2023/12/4 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android之Launcher分析和修改2——Icon修改、界面布局调整、壁纸设置 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
上一篇文章說了如何修改Android自帶Launcher2的默認界面設(shè)置(http://www.cnblogs.com/mythou/p/3153880.html)。

? ? 今天主要是說說Launcher里面圖標、布局、壁紙等的設(shè)置問題。畢竟我們一般修改Launcher,這些都是需要修改的地方,也是比較容易修改的部分。按照效果圖(效果圖在上一篇文章),分開說明如何修改,以及里面涉及的邏輯分析。

?原創(chuàng)博文,轉(zhuǎn)載請標明出處:http://www.cnblogs.com/mythou/p/3155692.html

1、圖標大小和標題大小

? ? Android原生圖標大小都是通過配置文件設(shè)置,配置文件路徑是/res/values/dimens.xml 。需要注意的是,values對應(yīng)的文件夾很多,因為是多國語言支持。而dimens.xml在默認的values文件夾下面或者values-land和values-port(針對不同分辨率和平板類型,需要根據(jù)你運行情況找對應(yīng)的dimens修改,如果需要使用多種分辨率,最好所有dimens都修改好)。下面是配置workspace的按鈕屬性配置。下面是針對values-land修改的cell大小。


//Edited by mythou //http://www.cnblogs.com/mythou/<!-- Workspace cell size --> <dimen name="workspace_cell_width_land">88dp</dimen> <dimen name="workspace_cell_width_port">96dp</dimen> <dimen name="workspace_cell_height_land">88dp</dimen> <dimen name="workspace_cell_height_port">96dp</dimen> <dimen name="workspace_width_gap_land">32dp</dimen> <dimen name="workspace_width_gap_port">0dp</dimen> <dimen name="workspace_height_gap_land">0dp</dimen> <dimen name="workspace_height_gap_port">24dp</dimen><!-- Folders --> <dimen name="folder_preview_size">68dp</dimen> <dimen name="folder_cell_width">86dp</dimen> <dimen name="folder_cell_height">90dp</dimen> <dimen name="folder_width_gap">3dp</dimen> <dimen name="folder_height_gap">3dp</dimen> <dimen name="folder_padding">6dp</dimen>

?2、Launcher 圖標加入默認背景。

? ? Launcher默認圖標是各自應(yīng)用程序設(shè)計的,這也導致了,界面圖標看上去大小不同意,有點凌亂的感覺。如果整個系統(tǒng)是自己修改的,內(nèi)置應(yīng)用圖標可以設(shè)置統(tǒng)一風格大小。如果是第三方程序就很難保證,所以一個折中辦法是給所有圖標加入一個背景,看上去風格一致。

?Launcher圖標的獲取處理是在Utilities.java類里面,我們可以從里面找到Bitmap createIconBitmap(Drawable icon, Context context) 方法。這個方法就是返回應(yīng)用圖標的。默認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, left+width, top+height, 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 一張默認的背景圖作為背景,這樣所有圖標看上去大小都是一致的。而且風格也比較接近。對于做系統(tǒng)應(yīng)用的人來說體驗比較好。如果需要一些比較炫的效果,其實可以在這里給圖標做倒影或者其他效果。

?

3、更換Launcher默認壁紙

Launcher默認的壁紙配置是放在framework下的res下面配置的,圖片也是放在framework下面。對于需要做獨立Launcher的項目,這個不能離開framework,非常不方便。所以就在Launcher自身實現(xiàn)一個默認壁紙設(shè)置的功能。默認壁紙,只能在Launcher第一次運行或者恢復默認設(shè)置時才需要設(shè)置顯示。

因此我把默認壁紙反正設(shè)置放在Launcher.java類的onCreate()方法下的showFirstRunWorkspaceCling()執(zhí)行。

showFirstRunWorkspaceCling()方法,只有Launcher第一次啟動或者清除數(shù)據(jù),恢復設(shè)置。才會運行。在showFirstRunWorkspaceCling()里面調(diào)用下面的方法

//Edited by mythou //http://www.cnblogs.com/mythou/private void setDefaultWallPaper(){//修改默認背景 OWL test,可以在Framework替換默認靜態(tài)圖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的壁紙都是調(diào)用系統(tǒng)WallpaperManager操作的,具體有興趣可以查看源碼。

android的靜態(tài)壁紙,默認是frameworks/base/core/res/res/drawable/default_wallpaper.jpg。如果是做系統(tǒng)的,可以替換這張jpg圖片也可以達到替換默認壁紙功能。

至于默認動態(tài)壁紙,這個要修改/framework/base/core/res/res/values/config.xml 。

<string name="default_wallpaper_component">@null</string>//把null修改為具體程序名,如下<string name="default_wallpaper_component" translatable="false">包名/動態(tài)壁紙服務(wù)名</string>

另外Launcher自身自帶了一些默認壁紙,反正Launcher的res/drawable文件夾下,不同分辨率文件夾放了大小不一樣。

這些默認壁紙在Launcher下values/wallpapers.xml下有配置。

//http://www.cnblogs.com/mythou/<resources><string-array name="wallpapers" translatable="false"><item>wallpaper_01</item><item>wallpaper_02</item><item>wallpaper_03</item><item>wallpaper_04</item><item>wallpaper_05</item><item>wallpaper_06</item><item>wallpaper_07</item><item>wallpaper_08</item><item>wallpaper_09</item><item>wallpaper_10</item><item>wallpaper_11</item><item>wallpaper_12</item></string-array> </resources>

不過系統(tǒng)默認最多是支持24張圖片。可以修改壁紙名字或者新增壁紙都是可以的。壁紙名字跟圖片名字一一對應(yīng)。

?

4、壁紙設(shè)置過程:

具體壁紙操作其實都是在WallpaperChooserDialogFragment這個Fragment里面實現(xiàn),

查找默認壁紙:

//Edited by mythou //http://www.cnblogs.com/mythou/private void findWallpapers() {mThumbs = new ArrayList<Integer>(24);mImages = new ArrayList<Integer>(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。這兩個功能原理是一樣的。

設(shè)置壁紙比較簡單,跟我們設(shè)置默認壁紙一樣

//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)); //設(shè)置壁紙Activity activity = getActivity();activity.setResult(Activity.RESULT_OK);activity.finish();} catch (IOException e) {Log.e(TAG, "Failed to set wallpaper: " + e);}}

主要還是調(diào)用WallpaperManager的setResource方法。

?

今天就寫到這里,如果有發(fā)現(xiàn)哪里寫錯了請留言,謝謝!



總結(jié)

以上是生活随笔為你收集整理的Android之Launcher分析和修改2——Icon修改、界面布局调整、壁纸设置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。