国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android開(kāi)發(fā)中Launcher3常見(jiàn)默認(rèn)配置的修改方法

2020-02-21 17:23:38
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

對(duì)于初級(jí)開(kāi)發(fā)人員來(lái)說(shuō),launcher可能有點(diǎn)奇怪。它通常被稱為“主屏幕”,這是我們開(kāi)始時(shí)看到的第一個(gè)應(yīng)用程序,今天,武林技術(shù)頻道小編就給大家介紹Android開(kāi)發(fā)中Launcher3常見(jiàn)默認(rèn)配置的修改方法,希望可以幫到大家。

Launcher概述

Launcher是開(kāi)機(jī)完成后第一個(gè)啟動(dòng)的應(yīng)用,用來(lái)展示應(yīng)用列表和快捷方式、小部件等。Launcher作為第一個(gè)(開(kāi)機(jī)后第一個(gè)啟動(dòng)的應(yīng)用)展示給用戶的應(yīng)用程序,其設(shè)計(jì)的好壞影響到用戶的體驗(yàn),甚至影響用戶購(gòu)機(jī)的判斷。所以很多品牌廠商都會(huì)不遺余力的對(duì)Launcher進(jìn)行深度定制,如小米的MIUI、華為的EMUI等。Android默認(rèn)的Launcher沒(méi)有過(guò)多的定制,更加簡(jiǎn)潔,受到源生黨的追捧,Google的Nexus系列手機(jī)基本都是用的源生Launcher,目前Android源生的Launcher版本是Launcher3,后面的相關(guān)內(nèi)容也都是以Launcher3為基礎(chǔ)。

Launcher3默認(rèn)配置修改

1.如何設(shè)置默認(rèn)頁(yè)

res/values/Config.xml

<integer name="config_workspaceDefaultScreen">0</integer>

在Launcher3 桌面,不管在哪一頁(yè),按HOME 鍵,會(huì)回到默認(rèn)頁(yè)。

2.如何隱藏launcher3中的搜索框

① 在Launcher3/src/com/android/launcher3/Launcher.java中

注釋updateGlobalIcons()方法調(diào)用,共兩處。

public View getQsbBar() {  if (mQsbBar == null) {    mQsbBar = mInflater.inflate(R.layout.search_bar, mSearchDropTargetBar, false);-       mSearchDropTargetBar.addView(mQsbBar);  }+    mQsbBar.setVisibility(View.GONE);  return mQsbBar;}@Overridepublic void bindSearchablesChanged() { //注釋該方法內(nèi)容/*    boolean searchVisible = updateGlobalSearchIcon();  boolean voiceVisible = updateVoiceSearchIcon(searchVisible);  if (mSearchDropTargetBar != null) {    mSearchDropTargetBar.onSearchPackagesChanged(searchVisible, voiceVisible);  }*/}

② 在Launcher3/src/com/android/launcher3/DynamicGrid.java中??

// Layout the search bar  //注釋如下內(nèi)容/*    View qsbBar = launcher.getQsbBar();  LayoutParams vglp = qsbBar.getLayoutParams();  vglp.width = LayoutParams.MATCH_PARENT;  vglp.height = LayoutParams.MATCH_PARENT;  qsbBar.setLayoutParams(vglp);*/

③ 在Launcher3/res/values/dimens.xml中
??? -??? <dimen name="dynamic_grid_search_bar_height">48dp</dimen>
??? +??? <dimen name="dynamic_grid_search_bar_height">18dp</dimen>

重新編譯后即可看到效果。

3.如何調(diào)整原生Launcher3主界面的search框的大小?

修改如下:

定位打/packages/apps/Launcher3/res/values/dimens.xml。

<dimen name="dynamic_grid_edge_margin">3dp</dimen>//修改這個(gè)可以調(diào)整search框距離頂部距離。
<dimen name="dynamic_grid_search_bar_max_width">500dp</dimen>//search框的寬度,一般不需要調(diào)整。
<dimen name="dynamic_grid_search_bar_height">48dp</dimen>//search框的高度,不要調(diào)整為0,刪除按鈕需要占用一部分空間。

4.讓主菜單部分應(yīng)用按指定順序排在前面?

添加res/values/arrays.xml:需要排序的應(yīng)用:這里的item 內(nèi)容一定要填寫正確,否則會(huì)匹配不上,無(wú)法參與排序。

<?xml version="1.0" encoding="utf-8"?><resources><string-array name="apps_componentName" translatable="false">  <item>ComponentInfo{com.android.vending/com.android.vending.AssetBrowserActivity}</item>  <item>ComponentInfo{com.android.browser/com.android.browser.BrowserActivity}</item>  <item>ComponentInfo{com.android.settings/com.android.settings.Settings}</item>  <item>ComponentInfo{com.android.camera2/com.android.camera.CameraLauncher}</item>  <item>ComponentInfo{com.android.mms/com.android.mms.ui.ConversationList}</item></string-array></resources>

src/com/android/launcher3/Utilities.java

 import java.util.Arrays; import java.util.List;  public static List<String> getAppsComponentName(final Context context) {    return Arrays.asList(context.getResources().getStringArray(R.array.apps_componentName));  }src/com/android/launcher3/LauncherModel.java protected int mPreviousConfigMcc;  static List<String> appArray = new ArrayList<String>();  LauncherModel(LauncherAppState app, IconCache iconCache, AppFilter appFilter) {    ......    mUserManager = UserManagerCompat.getInstance(context);    appArray = Utilities.getAppsComponentName(context);  }

添加如下sortApps 方法:apps 按arrays.xml 排序,在原來(lái)的排序基礎(chǔ)上,將arrays.xml 配置的應(yīng)用按順序排在前面。arrays.xml中沒(méi)有涉及到的應(yīng)用,還是原來(lái)的順序。

public static final void sortApps(ArrayList<AppInfo> apps) {  int length = appArray.size();  List<AppInfo> assignApps = new ArrayList<AppInfo>();  for(int i=0;i<length;i++) {    assignApps.add(i, null);  }  for(AppInfo app : apps){    for(int k=0; k<length; k++){      if (app.componentName.toString().equals(appArray.get(k))) {        assignApps.set(k,app );        continue;      }    }  }  for (int i =length -1;i > -1 ;i--) {   AppInfo app = assignApps.get(i);   if(app != null){     apps.remove(app);     apps.add(0, app);   } } Log.d(TAG ,"The Apps List after Sort!");}

src/com/android/launcher3/AppsCustomizePagedView.java

public void setApps(ArrayList<AppInfo> list) {    if (!LauncherAppState.isDisableAllApps()) {      ......      SprdAppSortAddonStub.getInstance().sortApps(mApps);      LauncherModel.sortApps(mApps);//在原來(lái)排序的基礎(chǔ)上,再將arrays.xml中配置的應(yīng)用按順序排在前面。      updatePageCountsAndInvalidateData();    }}private void addAppsWithoutInvalidate(ArrayList<AppInfo> list) {    ......    // SPRD: bug375932 2014-12-02 Feature customize app icon sort.    SprdAppSortAddonStub.getInstance().sortApps(mApps);    LauncherModel.sortApps(mApps);//在原來(lái)排序的基礎(chǔ)上,再將arrays.xml中配置的應(yīng)用按順序排在前面。}

5.如何確定待機(jī)HOME界面布局使用的是哪個(gè)default_workspace文件?

src/com/android/launcher3/DynamicGrid.java

選擇哪個(gè)default_workspace 和public DynamicGrid(Context context, Resources resources,int minWidthPx, int minHeightPx, int widthPx, int heightPx, int awPx, int ahPx)中的minWidthPx 和minHeightPx 以及該方法中創(chuàng)建的deviceProfiles 列表關(guān)。??????????????
minWidthPx 、minHeightPx 值轉(zhuǎn)換為dpi之后 ,deviceProfiles 列表與其進(jìn)行比較,選擇與當(dāng)前屏幕大小最接近的deviceProfiles 的default_workSpace作為最終Home界面使用的default_workspace。

詳細(xì)解釋如下:

src/com/android/launcher3/DynamicGrid.java中

① deviceProfiles 列表如下:

deviceProfiles.add(new DeviceProfile("Super Short Stubby",    255, 300, 2, 3, 48, 13, (hasAA ? 3 : 5), 48, R.xml.default_workspace_4x4));deviceProfiles.add(new DeviceProfile("Shorter Stubby",    255, 400, 3, 3, 48, 13, (hasAA ? 3 : 5), 48, R.xml.default_workspace_4x4));deviceProfiles.add(new DeviceProfile("Short Stubby",    275, 420, 3, 4, 48, 13, (hasAA ? 5 : 5), 48, R.xml.default_workspace_4x4));deviceProfiles.add(new DeviceProfile("Stubby",    255, 450, 3, 4, 48, 13, (hasAA ? 5 : 5), 48, R.xml.default_workspace_4x4));deviceProfiles.add(new DeviceProfile("Nexus S",    296, 491.33f, 4, 4, 48, 13, (hasAA ? 5 : 5), 48, R.xml.default_workspace_4x4));deviceProfiles.add(new DeviceProfile("Nexus 4",    335, 567, 4, 4, DEFAULT_ICON_SIZE_DP, 13, (hasAA ? 5 : 5), 56, R.xml.default_workspace_4x4));deviceProfiles.add(new DeviceProfile("Nexus 5",    359, 567, 4, 4, DEFAULT_ICON_SIZE_DP, 13, (hasAA ? 5 : 5), 56, R.xml.default_workspace_4x4));deviceProfiles.add(new DeviceProfile("Large Phone",    406, 694, 5, 5, 64, 14.4f, 5, 56, R.xml.default_workspace_5x5));// The tablet profile is odd in that the landscape orientation// also includes the nav bar on the sidedeviceProfiles.add(new DeviceProfile("Nexus 7",    575, 904, 5, 6, 72, 14.4f, 7, 60, R.xml.default_workspace_5x6));// Larger tablet profiles always have system bars on the top & bottomdeviceProfiles.add(new DeviceProfile("Nexus 10",    727, 1207, 5, 6, 76, 14.4f, 7, 64, R.xml.default_workspace_5x6));deviceProfiles.add(new DeviceProfile("20-inch Tablet",    1527, 2527, 7, 7, 100, 20, 7, 72, R.xml.default_workspace_4x4));

② 重新計(jì)算MinWidth 和MinHeigh? 單位是dpi。

mMinWidth = dpiFromPx(minWidthPx, dm);mMinHeight = dpiFromPx(minHeightPx, dm);

③ 創(chuàng)建mProfile,mProfile.defaultLayoutId 就是最終Home界面使用的default_workspace 的id。

mProfile中的defaultLayoutId 是哪個(gè)default_workspace 見(jiàn)DeviceProfile.java。

mProfile = new DeviceProfile(context, deviceProfiles,        mMinWidth, mMinHeight,        widthPx, heightPx,        awPx, ahPx,        resources);src/com/android/launcher3/DeviceProfile.java  DeviceProfile(Context context,         ArrayList<DeviceProfile> profiles,         float minWidth, float minHeight,         int wPx, int hPx,         int awPx, int ahPx,         Resources res) { 

方法中:

④ 用屏幕寬高創(chuàng)建的點(diǎn)(PointF xy = new PointF(width, height))與 deviceProfiles中的w 和 h 創(chuàng)建的點(diǎn)(dimens = new PointF(widthDps, heightDps))進(jìn)行比較,也就是從deviceProfiles 列表中找出和當(dāng)前屏幕大小最接近的deviceProfiles。

DeviceProfile closestProfile = findClosestDeviceProfile(minWidth, minHeight, points);......

⑤ 采用和當(dāng)前屏幕大小最接近的deviceProfiles的default_workspace

defaultLayoutId = closestProfile.defaultLayoutId; 

6.如何替換第三方應(yīng)用在launcher上顯示的圖標(biāo)?

在launcher/src/com/android/launcher3/IconCache.java中修改,

private CacheEntry cacheLocked(ComponentName componentName, ResolveInfo info,  private CacheEntry cacheLocked(ComponentName componentName, ResolveInfo info,    HashMap<Object, CharSequence> labelCache) {  CacheEntry entry = mCache.get(componentName);  if (entry == null) {    entry = new CacheEntry();    mCache.put(componentName, entry);    ComponentName key = LauncherModel.getComponentNameFromResolveInfo(info);    if (labelCache != null && labelCache.containsKey(key)) {      entry.title = labelCache.get(key).toString();    } else {      entry.title = info.loadLabel(mPackageManager).toString();      if (labelCache != null) {        labelCache.put(key, entry.title);      }    }    if (entry.title == null) {      entry.title = info.activityInfo.name;    }    Drawable icon;    int index = sysIndexOf(componentName.getClassName());    Log.i("jxt", "index:"+index+",Name:"+componentName.getClassName());    icon = getFullResIcon(info);    if (index >= 0) {      entry.icon = Utilities.createIconBitmap(icon, mContext);    } else {      entry.icon = Utilities.createIconBitmap(          /* SPRD: Feature 253522, Remove the application drawer view @{ */          // getFullResIcon(info), mContext);          icon, mContext, true);    }    /* 此處即為替換圖標(biāo)代碼 {@*/    if("第三方應(yīng)用的componentName".equals(componentName.toString())){      entry.icon = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.xxx);    }    /* @} */  }  return entry;}  

7.如何去掉Launcher3的開(kāi)機(jī)引導(dǎo)頁(yè)面?

修改方案如下:

請(qǐng)定位到src/com/android/launcher3/LauncherClings.java文件:

class LauncherClings implements OnClickListener {     ......     private static final String TAG_CROP_TOP_AND_SIDES = "crop_bg_top_and_sides    private static final boolean DISABLE_CLINGS = false;    private static final boolean DISABLE_CLINGS = true;

8.為何Launcher3設(shè)置一些壁紙后,壁紙顯示比預(yù)覽圖模糊?

預(yù)覽的時(shí)候,沒(méi)有做格式轉(zhuǎn)化,所以顯示正常!

在設(shè)置壁紙的時(shí)候,默認(rèn)是采用jpeg格式轉(zhuǎn)換的,導(dǎo)致轉(zhuǎn)換后損耗了一些,設(shè)置壁紙后,某些對(duì)比度比較高的壁紙就顯示的模糊!

修改方案:

默認(rèn)修改為采用png格式轉(zhuǎn)換!

android6.0之前的版本,請(qǐng)做如下修改:

定位到/packages/apps/Launcher3/的WallpaperCropActivity.java文件

1、String mOutputFormat = "jpg";//修改為"png"

2、

protected static String getFileExtension(String requestFormat) {    String outputFormat = (requestFormat == null)        ? "jpg"http://修改為"png"        : requestFormat;    outputFormat = outputFormat.toLowerCase();    return (outputFormat.equals("png") || outputFormat.equals("gif"))        ? "png" // We don't support gif compression.        : "jpg";}

android6.0的版本,請(qǐng)做如下修改:

定位到/packages/apps/Launcher3/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java文件

if (crop.compress(CompressFormat.JPEG, DEFAULT_COMPRESS_QUALITY, tmpOut))

修改為:

if (crop.compress(CompressFormat.PNG, DEFAULT_COMPRESS_QUALITY, tmpOut))

9. 6.0平臺(tái)上Launcher3自帶的壁紙路徑是什么?

在6.0中,平臺(tái)版本預(yù)置了一些壁紙資源,相關(guān)路徑如下:

資源文件在:

packages/apps/Launcher3/WallpaperPicker/res/drawable-xhdpi/

字串文件在:

packages/apps/Launcher3/WallpaperPicker/res/values-nodpi/wallpapers.xml

除了這些本文介紹的這些知識(shí),當(dāng)然還有其它的專業(yè)知識(shí),歡迎大家留言補(bǔ)充。更多關(guān)于Android開(kāi)發(fā)中Launcher3常見(jiàn)默認(rèn)配置的修改方法,盡在武林技術(shù)頻道!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 阿城市| 普兰店市| 晴隆县| 吉首市| 宁晋县| 庆元县| 屯门区| 济源市| 威远县| 建水县| 晴隆县| 深州市| 福建省| 金沙县| 巴青县| 鹤山市| 饶河县| 榆林市| 博白县| 上虞市| 仁寿县| 页游| 福清市| 岳阳市| 和田县| 呼玛县| 枣阳市| 鹤岗市| 喀喇沁旗| 垣曲县| 桂东县| 长子县| 南郑县| 清水河县| 山东省| 武威市| 谷城县| 二连浩特市| 临沭县| 漠河县| 盐山县|