国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【安卓13】谷歌原生桌面launcher3源碼修改,修改桌面布局(首屏應用、小部件、導航欄、大屏設備任務欄)

這篇具有很好參考價值的文章主要介紹了【安卓13】谷歌原生桌面launcher3源碼修改,修改桌面布局(首屏應用、小部件、導航欄、大屏設備任務欄)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

近期接到一個關于谷歌EDLA認證的需求,我負責的是谷歌原生桌面布局的修改,通過研究源碼,將涉及到了一些修改思路發(fā)出來,大家可以參考一下有沒有對你有用的信息。主要修改內容有:

1、搜索欄、底部導航欄未居中
2、中部應用未按要求排布,詳情請參考摹客
3、在原生Google桌面未添加中性S-write和投屏Kshare、歡迎頁應用

現狀圖:【安卓13】谷歌原生桌面launcher3源碼修改,修改桌面布局(首屏應用、小部件、導航欄、大屏設備任務欄)

參考圖:【安卓13】谷歌原生桌面launcher3源碼修改,修改桌面布局(首屏應用、小部件、導航欄、大屏設備任務欄)

一、谷歌搜索框的修改

涉及修改的地方有:

1、Launcher3\res\xml\device_profiles.xml

2、com/android/launcher3/Workspace.java

1、首先觀察device_profiles.xml代碼,一般大屏(平板)設備會加載6*5的布局,手機設備會加載手機的布局,該文件里定義了4個不同的布局類型,如何確定設備加載哪個布局呢?你可以在桌面長按應用圖標,然后觀察可以移動多少個格子,然后根據行列數找到要修改的布局位置。比如我設備是加載6 * 5布局,我修改這里launcher:numSearchContainerColumns="5"修改谷歌搜索框占據5個格子(橫屏總共7個格子)

<--這個行數可以根據自己想要的效果修改,比如我就改了7*6布局,6行7列--/>	
	<grid-option
        launcher:name="6_by_5"
        launcher:numRows="6" 
        launcher:numColumns="7"
        launcher:numSearchContainerColumns="5"
        launcher:numFolderRows="3"
        launcher:numFolderColumns="4"
        launcher:numHotseatIcons="0"
        launcher:hotseatColumnSpanLandscape="2"
        launcher:numAllAppsColumns="6"
        launcher:isScalable="true"
        launcher:inlineNavButtonsEndSpacing="@dimen/taskbar_button_margin_6_5"
        launcher:devicePaddingId="@xml/paddings_6x5"
        launcher:dbFile="launcher_6_by_5.db"
        launcher:defaultLayoutId="@xml/default_workspace_6x5"
        launcher:deviceCategory="tablet" >

        <display-option
            launcher:name="Tablet"
            launcher:minWidthDps="900"
            launcher:minHeightDps="820"
            launcher:minCellHeight="120"
            launcher:minCellWidth="102"
            launcher:minCellHeightLandscape="104"
            launcher:minCellWidthLandscape="120"
            launcher:iconImageSize="60"
            launcher:iconTextSize="14"
            launcher:borderSpaceHorizontal="16"
            launcher:borderSpaceVertical="64"
            launcher:borderSpaceLandscapeHorizontal="64"
            launcher:borderSpaceLandscapeVertical="16"
            launcher:horizontalMargin="54"
            launcher:horizontalMarginLandscape="120"
            launcher:allAppsCellWidth="96"
            launcher:allAppsCellHeight="142"
            launcher:allAppsCellWidthLandscape="126"
            launcher:allAppsCellHeightLandscape="126"
            launcher:allAppsIconSize="60"
            launcher:allAppsIconTextSize="14"
            launcher:allAppsBorderSpaceHorizontal="8"
            launcher:allAppsBorderSpaceVertical="16"
            launcher:allAppsBorderSpaceLandscape="16"
            launcher:hotseatBarBottomSpace="30"
            launcher:hotseatBarBottomSpaceLandscape="40"
            launcher:canBeDefault="true" />

    </grid-option>

</profiles>

2、谷歌搜索框的位置在workspace.java里面修改,在該類里面查找這個方法:bindAndInitFirstWorkspaceScreen,定位到這里

    public void bindAndInitFirstWorkspaceScreen() {
        if (!FeatureFlags.QSB_ON_FIRST_SCREEN) {
            return;
        }

        // Add the first page
        CellLayout firstPage = insertNewWorkspaceScreen(Workspace.FIRST_SCREEN_ID, getChildCount());
        // Always add a first page pinned widget on the first screen.
        if (mFirstPagePinnedItem == null) {
            // In transposed layout, we add the first page pinned widget in the Grid.
            // As workspace does not touch the edges, we do not need a full
            // width first page pinned widget.
            mFirstPagePinnedItem = LayoutInflater.from(getContext())
                    .inflate(R.layout.search_container_workspace, firstPage, false);
        }

        int cellHSpan = mLauncher.getDeviceProfile().inv.numSearchContainerColumns;
        //格子數從0開始算,這里表示搜索框位置從X軸第2格子,y軸第3個格子算起,x軸占據5(cellHSpan)個格子,y軸占據1個格子
        CellLayoutLayoutParams lp = new CellLayoutLayoutParams(1, 2, cellHSpan, 1, FIRST_SCREEN_ID);
        lp.canReorder = false;
        if (!firstPage.addViewToCellLayout(
                mFirstPagePinnedItem, 0, R.id.search_container_workspace, lp, true)) {
            Log.e(TAG, "Failed to add to item at (0, 0) to CellLayout");
            mFirstPagePinnedItem = null;
        }
    }

提示:如果一開始桌面沒有谷歌搜索框,可以使用微件的形式添加,添加微件這里又分為兩種情況,具體使用哪種方式得看系統有沒有去讀取配置文件,沒有的話就使用第一種,一種是直接在布局文件里面添加,比如res/xml/default_workspace_6x5.xml里面添加:

<appwidget
    container="-100"
    screen="0"
    x="1"
    y="2"
    spanX="5"
    spanY="1"
    packageName="com.google.android.googlequicksearchbox"
    className="com.google.android.googlequicksearchbox.SearchWidgetProvider"/>

另外一種方式是在google_gms包下的配置文件里面添加:release\vendor\partner_gms\apps\GmsSampleIntegration\res_dhs_full\xml\partner_default_layout.xml,例如

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2017 Google Inc. All Rights Reserved. -->
<favorites>
  <!-- Hotseat (We use the screen as the position of the item in the hotseat) -->
  <!-- Dialer Messaging Calendar Contacts Camera -->
  <!--<favorite container="-101" screen="0" x="0" y="0" packageName="com.google.android.dialer" className="com.google.android.dialer.extensions.GoogleDialtactsActivity"/>-->
  <!--<favorite container="-101" screen="1" x="1" y="0" packageName="com.google.android.apps.messaging" className="com.google.android.apps.messaging.ui.ConversationListActivity"/>-->
  <!-- <favorite container="-101" screen="0" x="0" y="0" packageName="com.android.settings" className="com.android.settings.Settings"/> -->
  <!-- <favorite container="-101" screen="1" x="1" y="0" packageName="com.android.deskclock" className="com.android.deskclock.DeskClock"/> -->
  <!-- <favorite container="-101" screen="2" x="2" y="0" packageName="com.google.android.calendar" className="com.android.calendar.event.LaunchInfoActivity"/> -->
  <!-- <favorite container="-101" screen="3" x="3" y="0" packageName="com.google.android.contacts" className="com.android.contacts.activities.PeopleActivity"/> -->
  <!-- <favorite container="-101" screen="4" x="4" y="0" packageName="com.android.camera2" className="com.android.camera.CameraLauncher"/> -->
  <!-- In Launcher3, workspaces extend infinitely to the right, incrementing from zero -->
  <!-- Google folder -->
  <!-- Google, Chrome, Gmail, Maps, YouTube, (Drive), (Music), (Movies), Duo, Photos -->
  <folder title="@string/google_folder_title" screen="0" x="1" y="3">
    <favorite packageName="com.google.android.googlequicksearchbox" className="com.google.android.googlequicksearchbox.SearchActivity"/>
    <favorite packageName="com.android.chrome" className="com.google.android.apps.chrome.Main"/>
    <favorite packageName="com.google.android.gm" className="com.google.android.gm.ConversationListActivityGmail"/>
    <favorite packageName="com.google.android.apps.maps" className="com.google.android.maps.MapsActivity"/>
    <favorite packageName="com.google.android.youtube" className="com.google.android.youtube.app.honeycomb.Shell$HomeActivity"/>
    <favorite packageName="com.google.android.apps.docs" className="com.google.android.apps.docs.app.NewMainProxyActivity"/>
    <favorite packageName="com.google.android.apps.youtube.music" className="com.google.android.apps.youtube.music.activities.MusicActivity"/>
    <favorite packageName="com.google.android.videos" className="com.google.android.videos.GoogleTvEntryPoint"/>
    <favorite packageName="com.google.android.apps.tachyon" className="com.google.android.apps.tachyon.MainActivity"/>
    <favorite packageName="com.google.android.apps.photos" className="com.google.android.apps.photos.home.HomeActivity"/>
  </folder>
  <favorite screen="0" x="5" y="3" packageName="com.android.vending" className="com.android.vending.AssetBrowserActivity"/>
  
  <appwidget screen="0" x="2" y="0" packageName="com.android.deskclock" className="com.android.alarmclock.DigitalAppWidgetProvider" spanX="3" spanY="2" />
  <appwidget screen="0" x="1" y="2" packageName="com.google.android.googlequicksearchbox" className="com.google.android.googlequicksearchbox.SearchWidgetProvider" spanX="5" spanY="1" />
</favorites>

注釋掉的內容是定義桌面的hotSeat顯示的應用,其中,添加小部件使用的是appwidget標簽,桌面時鐘就可以這樣添加,folder標簽定義的是一個桌面文件夾,里面可以定義文件夾要存放的應用。

二、首屏應用位置修改

和谷歌搜索框一樣,也是在device_profiles.xml文件里面定義桌面的行列數,然后根據系統是否會讀取partner_default_layout.xml布局文件來決定修改的位置;(1)如果讀取,則在partner_default_layout.xml里面定義應用的包名和類型以及位置信息例如<favorite screen="0" x="5" y="3" packageName="com.android.vending" className="com.android.vending.AssetBrowserActivity"/>表示在screen="0"(第一屏)的第6列格子,第4行格子添加谷歌商店app。(2)如果不讀取partner_default_layout.xml布局文件,則在對應的X×X.xml里面修改應用的位置。
【安卓13】谷歌原生桌面launcher3源碼修改,修改桌面布局(首屏應用、小部件、導航欄、大屏設備任務欄)

三、底部任務欄和導航欄修改

如果設置了hotSeat應用在底部,即在partner_default_layout.xml定義的container="-101"的標簽(文件里被注釋掉的部分代碼),那么在桌面是顯示的是底部固定的應用,不會展示最近任務欄,如果屏蔽掉了hotSeat固定的應用,則默認顯示最近任務欄去替換掉固定的應用,最近任務欄顯示圖標的數量與device_profiles.xml文件里的launcher:numHotseatIcons="0"屬性有關,這里我設置numHotSeatIcon=0表示不顯示最近任務欄,如果你想去掉任務欄,可以使用這種方式,有其他博客去掉任務欄的方法是將isTablet的屬性設置為false,意思是將設備設置為手機屏幕,手機屏幕不顯示最近任務欄,導航欄也會默認居中,我試過該方法在大屏設備上行不通,達不到想要的效果,大家可以去看看他寫的:大屏設備底部導航欄居右
如果使用我的方法,即將hotSeat顯示的圖標數量設置為0,如果直接編譯,運行時會發(fā)生運行時異常,通過抓log發(fā)現,在源碼中有多處地方在計算布局的時候,都會去除以numHotseatIcons,而我們知道,除數不能為0,所以報錯桌面閃退。這個時候,我們需要將引發(fā)異常的地方修改一下(注意numHotseatIcons也不能為1,因為有個地方對numHotseatIcons做了-1操作),修改位置如下:
com/android/launcher3/DeviceProfile.java
在這類里面查找numShownHotseatIcons,將涉及到numShownHotseatIcons的計算都做一層判斷,如果為0,則換一種算法
【安卓13】谷歌原生桌面launcher3源碼修改,修改桌面布局(首屏應用、小部件、導航欄、大屏設備任務欄)

也可以先在device_profiles.xml里面查找追蹤numHotseatIcons這個變量,一步步追蹤到DeviceProfile.java這個類,這樣會對整個流程更清楚
【安卓13】谷歌原生桌面launcher3源碼修改,修改桌面布局(首屏應用、小部件、導航欄、大屏設備任務欄)
這里是我修改的具體位置,截圖有行號,給大家參考:
【安卓13】谷歌原生桌面launcher3源碼修改,修改桌面布局(首屏應用、小部件、導航欄、大屏設備任務欄)
注意到這個方法,里面也用到了
【安卓13】谷歌原生桌面launcher3源碼修改,修改桌面布局(首屏應用、小部件、導航欄、大屏設備任務欄)
修改這兩個計算方法
【安卓13】谷歌原生桌面launcher3源碼修改,修改桌面布局(首屏應用、小部件、導航欄、大屏設備任務欄)
修改到這里,我們已經把最近任務欄去掉啦?。?/p>

四、接下來就是要把導航欄居中

首先我們觀察device_profiles.xml文件,注意到有這個變量
【安卓13】谷歌原生桌面launcher3源碼修改,修改桌面布局(首屏應用、小部件、導航欄、大屏設備任務欄)
查找這個變量,追蹤代碼發(fā)現,這個變量控制著底部導航欄距離右邊框的dp值,數值越大,越往中間靠攏,有了這個思路,讓導航欄居中也就不難實現了,首先我們知道,導航欄居右是因為系統判斷為大屏設備tablet,我們既然要保留tablet這個屬性,就不能通過改變設備為手機模式來控制導航欄居中,所以就可以控制右邊距啦!
【安卓13】谷歌原生桌面launcher3源碼修改,修改桌面布局(首屏應用、小部件、導航欄、大屏設備任務欄)
而改變這個值很簡單,只需要改變引用的資源值即可
【安卓13】谷歌原生桌面launcher3源碼修改,修改桌面布局(首屏應用、小部件、導航欄、大屏設備任務欄)
我們進入該文件,改變右邊距
【安卓13】谷歌原生桌面launcher3源碼修改,修改桌面布局(首屏應用、小部件、導航欄、大屏設備任務欄)
這個值大家可以慢慢調試,我這里是居中了。

五、總結

寫個總結:首先判斷系統是否加載partner_gms里面的布局文件,再修改布局代碼,這個源碼我研究了一周多,網上關于安卓13的launcher3資料不全,最終還是得自己研究源碼追蹤代碼,期間編譯調試了幾十次吧??!
最終效果
【安卓13】谷歌原生桌面launcher3源碼修改,修改桌面布局(首屏應用、小部件、導航欄、大屏設備任務欄)文章來源地址http://www.zghlxwxcb.cn/news/detail-746030.html

到了這里,關于【安卓13】谷歌原生桌面launcher3源碼修改,修改桌面布局(首屏應用、小部件、導航欄、大屏設備任務欄)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Android 13.0 Launcher3定制之雙層改單層(去掉抽屜式四)

    ?在13.0的系統產品開發(fā)中,對于在Launcher3中的抽屜模式中,系統默認的就是抽屜單層模式,但是在很多產品中需要默認為單層模式,就是要求去掉雙層抽屜模式,接下來看下如何繼續(xù)實現去掉抽屜雙層模式,來變成單層模式第四節(jié) Launcher3定制之雙層改單層(去掉抽屜式四)的功

    2024年02月09日
    瀏覽(103)
  • Android 13.0 Launcher3 電話和短信app圖標顯示未讀短信和未接來電的條數

    Android 13.0 Launcher3 電話和短信app圖標顯示未讀短信和未接來電的條數

    在13.0系統產品rom定制化開發(fā)中,最近客戶有需求要求在電話app圖標顯示未接來電的條數 在短信app圖標上顯示未讀信息的條數 根據需求首選要在Launcher3的Launcher.java中,啟動launcher時,查詢未讀短信和未接來電 在有未接來電時,更新未接來電的數量 在有未讀短信時,更新未讀短

    2024年01月17日
    瀏覽(33)
  • 安卓原生電視盒子首次激活連不上wifi? Google tv adb命令 修改網絡訪問限制,禁用本地桌面 啟用emotnUI

    安卓原生電視盒子首次激活連不上wifi? 軟路由里把time.android.com劫持到 203.107.6.88(阿里云的ntp服務器)就能解決原生安卓時間不對的問題 了 clash 規(guī)則加入 - DOMAIN-SUFFIX,googleapis.com,xxxx #xxxx是你需要配置的名字 OpenWRT 具體步驟:openwrt—網絡----dhcp/dns----host和解析文件拉到最下邊-

    2024年02月04日
    瀏覽(26)
  • 搭載基于RK3229的Android5.1修改開機默認桌面Launcher

    搭載基于RK3229的Android5.1修改開機默認桌面Launcher

    在..rk3229_5.1_boxframeworksbaseservicescorejavacomandroidserveram目錄找到ActivityManagerService.java文件。在文件里找到startHomeActivityLocked函數里的setDefaultLauncher。 在setDefaultLauncher設置開機默認桌面launch的包名。我開發(fā)的固件,所要啟動的包名如下: ?? ??? ? String ?packageName = SystemP

    2024年02月06日
    瀏覽(19)
  • Android 9.0 當系統內置兩個Launcher時默認設置Launcher3以外的那個Launcher為默認Launcher

    在9.0系統rom定制化開發(fā)中,由于產品開發(fā)需要要求系統內置兩個Launcher,一個是Launcher3,一個是自己開發(fā)的Launcher,當系統啟動Launcher時, 不要彈出Launcher選擇列表 選擇哪個Launcher要求默認選擇自己開發(fā)的Launcher作為默認Launcher,關于選擇Launcher列表 其實都是在ResolverActivity.java中處理

    2024年01月18日
    瀏覽(27)
  • Android 10.0 當系統內置兩個Launcher時默認設置Launcher3以外的那個Launcher為默認Launcher

    在10.0定制化開發(fā)中,由于產品開發(fā)需要要求系統內置兩個Launcher,一個是Launcher3,一個是自己開發(fā)的Launcher,當系統啟動Launcher時, 不要彈出Launcher選擇列表 選擇哪個Launcher要求默認選擇自己開發(fā)的Launcher作為默認Launcher,關于選擇Launcher列表 其實都是在ResolverActivity.java中處理的具

    2024年02月10日
    瀏覽(22)
  • Android 13 Launcher——長按圖標彈窗內容修改以及小組件等隱藏起來

    目錄 一.背景 二.實現思路 三.布局文件修改 四.隱藏代碼中原先的view 由于定制化開發(fā)需要將原先的長按圖標原生彈窗界面隱藏,然后顯示自定義的彈

    2024年02月13日
    瀏覽(59)
  • Launcher3 安裝App加載顯示過程分析,開源新作

    Launcher3 安裝App加載顯示過程分析,開源新作

    /** Called before the task is posted to initialize the internal state. */ void init(LauncherAppState app, LauncherModel model, BgDataModel dataModel, AllAppsList allAppsList, Executor uiExecutor); } public abstract class BaseModelUpdateTask implements ModelUpdateTask { PackageUpdatedTask 處理由于程序包管理器中的更改(應用程序安裝、更新、

    2024年04月26日
    瀏覽(20)
  • Android 12.0Launcher3 禁止卸載某個第三方app

    在12.0的系統rom開發(fā)中,預安裝的方法來安裝這個app.然后在Launcher3 拖拽卸載時,不讓他卸載接下來就看Launcher3 app 長按卸載的流程 在luncher.xml中 drop_targe_bar.xml

    2024年02月07日
    瀏覽(28)
  • Android 9.0 Launcher3去掉抽屜模式 雙層改成單層系列一

    ? 在9.0的系統產品開發(fā)中,在Launcher3中系統默認是上滑抽屜模式,通過上滑可以拉出app列表頁,產品需求要求改成去掉上滑抽屜模式 就是改成單層模式,所以本系列就來講解下雙層改單層系列第一講

    2024年02月03日
    瀏覽(37)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包