1. 程式人生 > >(3)Launcher3 的佈局和結構

(3)Launcher3 的佈局和結構

首先你需要去 這裡 下載下Launcher3的原始碼。這個是我從android原始碼裡面拿出來的,修改刪掉了一些東西,方便在eclipse上執行,你可以直接在手機上執行,有了程式碼和apk再來看說明,心理會很踏實的。

Launcher3其實最主要的是一個Activity,基本上所有的操作都集中在這個Activity上,在Launcher.java 當中,setContentView的引數是R.layout.launcher,我們暫時只研究下桌面豎屏的情況,相關原始碼在res/layout-port/launcher.xml。

請左手拿著你執行著launcher3的手機,右手開啟launcher.xml,佈局的最外面是一個FrameLayout,緊緊地包圍了一個叫DragLayer的ViewGroup,他繼承自FrameLayout,主要功能就是處理拖拽事件,當你在拖拽一個圖示的時候,就是一個view放到了DragLayer裡面,跟隨你的手在移動。

下面在你的手機螢幕上左右滑,有好幾屏,這個能滑的東西叫做Workspace,在佈局檔案裡面可以看到的,Workspace能算是Launcher3程式碼裡程式碼量前三的吧,他的父類的父類是PagedView,一個用來處理左右滑動的ViewGroup。那麼Workspace裡面可以滑動的單獨一屏叫什麼呢? 佈局檔案裡面似乎沒有寫,其實是CellLayout,他負責的是圖示和小部件的顯示和整齊擺放。

接下來看你在滑動螢幕的時候看見下方有個指示器,告訴你桌面現在有幾屏,當前是在哪一屏上。這個東西叫做PageIndicator,從名字就可以看出意義了。還有最下面的4個固定不動的圖示,和中間一個Button顯示所有應用,這整個叫做Hotseat,用來放置比較常用的應用,比如撥號,簡訊,相機等等。

螢幕最上方有個搜尋框,在我們拖動圖示的時候,這個搜尋框會替換成“刪除”,整個這部分叫做SearchDropTargetBar。長按桌面空白區域的時候會進入一個介面,這裡可以對螢幕進行換序操作,下面有三個按鈕“桌布”,“小部件”和“設定”,這個在佈局檔案裡的id為overview_panel。接下來還有幾個為cling結尾的子佈局,這些是桌面第一次啟動時候的幫助介面,告訴你怎麼點選怎麼用。

最後哈有兩個東西我暫時還沒有搞懂,ScrimView和DrawableStateProxyView,如果有人知道的話,留個言哈~

一圖勝千言:

桌面基本結構

相關推薦

3Launcher3佈局結構

首先你需要去 這裡 下載下Launcher3的原始碼。這個是我從android原始碼裡面拿出來的,修改刪掉了一些東西,方便在eclipse上執行,你可以直接在手機上執行,有了程式碼和apk再來看說明,心理會很踏實的。 Launcher3其實最主要的是一個Activity

ceph3--Ceph 物理邏輯結構

gre network 鏡像 操作記錄 share 速度 深度優先 cache 訪問 本系列文章會深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安裝和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和邏輯結構 (4)Ceph 的

一本正經的聊資料結構3:棧佇列

![](https://cdn.geekdigging.com/DataStructure/head.png) 前文傳送門: [「一本正經的聊資料結構(1):時間複雜度」](https://www.geekdigging.com/2020/03/28/6072951828/) [「一本正經的聊資料結構(

C++開發人臉性別識別教程3——OpenCv配置ImageWatch插件介紹

下劃線 toc bsp 對話 顯示 調試 詳細 結構 post   OpenCv是C++圖像處理的重要工具。這個人臉性別識別的項目就是借助OpenCv進行開發的。盡管網上已經有了非常多關於OpenCv的配置教程,但出於教程完整性考慮。這裏還是用專門的一篇博客來介紹Ope

redis源碼分析3-- 基本數據結構雙鏈表list

direction 函數指針 all eas 源碼 計數 type ima blog 一、雙鏈表結構 redis中實現的雙鏈表結構體如下: 1 typedef struct list { 2 listNode *head; # 鏈表頭 3 listNode

redis源碼分析3-- 基本數據結構字典dict

下一個 edi code int current tty 大小 .com 個數 一、字典結構 Redis中字典采用hash表結構,如下: typedef struct dictht { dictEntry **table; // hash表數組 uns

C++程序設計基礎3條件語句循環語句

程序員面試 true 短信 har 單引號 turn table tchar strong 註:讀《程序員面試筆記》筆記總結 1.知識點 1.1條件語句 (1)if……;(2)if……else……;(3)if……else if……;(4)switch(){case ():b

尋找“最好”3——函數泛函的拉格朗日乘數法

big 我們 -a 都是 使用 col 可能 條件 解釋 拉格朗日乘數法   大多數的優化問題都會加入特定的約束,而不僅僅是指定起點和終點,此時需要更好的辦法去解決優化問題,拉格朗日乘數法正是一種求約束條件下極值的方法。   簡單地說,拉格朗日乘數法(又稱為拉格朗日乘數法)

Netty學習3: 客戶端服務端的例子

服務端: package com.server; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; import

ucosiii學習3——任務排程時間片輪轉

1.任務級排程器 OSSched() 系統初始化後會自動建立幾個任務,可以看到所呼叫的建立任務函式OSTaskCreate的最後都會呼叫OSSched()函式(任務級排程器)。 Description: This function is called by other uC/OS-III s

python機器學習入門3——裝飾器元類

記住這幾句話: 萬物皆物件 裝飾器(decorator):函式亦物件 元類(meta class):類亦物件 物件意味著可以被賦值給變數,通過變數也能呼叫此物件   兩個簡單的程式: 裝飾器例程:實現對函式func的計時   元類例程: 實

轉載深度學習基礎3——神經網路反向傳播演算法

原文地址:https://www.zybuluo.com/hanbingtao/note/476663 轉載在此的目的是自己做個筆記,日後好複習,如侵權請聯絡我!!   在上一篇文章中,我們已經掌握了機器學習的基本套路,對模型、目標函式、優化演算法這些概念有了一定程度的理解,而且已經會訓練單個的感知器或者

python3面向物件3私有屬性方法以及訪問私有屬性方法的方式

python3中的私有屬性和方法是以__兩個下劃線開頭的: class Woman(object): #定義一個woman類 def __init__(self,name): self.name = name #公有屬性 self

Zookeeper C API之監視Watch、常量結構

1、監視(Watch)簡介 Zookeeper C API的宣告和描述定義在檔案include/zookeeper.h中,大部分的常量、結構體宣告也定義在這個檔案中。 Zookeeper所有的讀操作(包括:getData()、getChildren()和exists())度可以設定Watch

第9章 應用層3_telnet協議遠端桌面協議RDP

3.1 telnet簡介 (1)telnet是一個簡單的遠端終端協議,也是因特網的正式標準。使用者使用telnet連線到遠端執行telnet服務的裝置(可以是網路裝置、比如路由器、交換機,也可以是作業系統)進行遠端管理。 (2)telnet能將使用者的鍵盤指令傳到遠端主機,同時也能將遠端主機

TensorFlow筆記3——利用TensorFlowMNIST資料集訓練一個最簡單的手寫數字識別模型

前言 當我們開始學習程式設計的時候,第一件事往往是學習列印"Hello World"。就好比程式設計入門有Hello World,機器學習入門有MNIST。 MNIST是一個入門級的計算機視覺資料集,它包含各種手寫數字圖片: 它也包含每一張圖片對應的標籤,告訴我們這個是數字幾。比如,上

人工智慧3- 模型評估調參

1.pipeline 管道利用     pipeline的概念可以從這裡抽象出來:將一件需要重複做的事情切割成各個不同的階段,每一個階段由獨立的單元負責。所有待執行的物件依次進入作業佇列。     管道機智在機器學習中得以應用的根源

Qt學習3——選單欄工具欄

 0、建立專案: 前面步驟一樣,到下圖基類換一下: 1、選單欄 標頭檔案: 一些函式原型宣告: void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget, Qt::Orient

java學習3構造器垃圾收集器、數字與靜態

構造器和垃圾收集器 棧與堆 方法的呼叫和區域性變數在棧,所有的物件在堆 棧頂上的方法是目前正在執行的。 物件的引用變數(就是遙控器)存放在棧上,而物件則存放到堆上 例項變數存放在所屬物件的堆空間上。 建構函式 建構函式並不是一個方法 建構函式沒有返回的型別,並

Linux基本命令3檔案備份壓縮命令

來原始檔: 檔案備份和壓縮命令 在Linux中,常用的檔案壓縮工具有gzip、bzip2、zip。bzip2是最理想的壓縮工具,它提供了最大限度的壓縮。zip相容性好,Windows也支援。 命令 功能 bzip2/bunzip2 副檔名為bz2的壓