`
gnibrE
  • 浏览: 136494 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Launcher 源码(没写几行阑尾聊。。)

阅读更多
Launcher主要由下面这些view东东组成:

别看名字千奇百怪,都是view哦

private DragLayer mDragLayer;
mDragLayer = (DragLayer) findViewById(R.id.drag_layer);
private Workspace mWorkspace;
mWorkspace = (Workspace) dragLayer.findViewById(R.id.workspace);
private SlidingDrawer mDrawer;
mDrawer = (SlidingDrawer) dragLayer.findViewById(R.id.drawer);
private AllAppsGridView mAllAppsGrid;
mAllAppsGrid = (AllAppsGridView) drawer.getContent();
private HandleView mHandleView;
mHandleView = (HandleView) drawer.findViewById(R.id.all_apps);
DeleteZone deleteZone = (DeleteZone) dragLayer.findViewById(R.id.delete_zone);// 偷偷在setupview时建的,不是类成员。 给handleview set了一个handle



launcher运行时候能看到的。基本也就是这些元素组成的。

 LayoutInflater mInflater;

把各种xml文件对应的layout 部署到调用他的 Context上,即Launcher上。
在onCreate时初始化。


private AppWidgetManager mAppWidgetManager;

appwidget 管理控制相应的 widget app.

private LauncherAppWidgetHost mAppWidgetHost;

继承了AppWidgetHost 用来和appwidget service交互。

private final BroadcastReceiver mApplicationsReceiver = new ApplicationsIntentReceiver();
    private final BroadcastReceiver mCloseSystemDialogsReceiver = new CloseSystemDialogsIntentReceiver();

两个receiver,对相应的intent进行响应。源码里只看到package的三个action:ACTION_PACKAGE_ADDED,ACTION_PACKAGE_REMOVED,ACTION_PACKAGE_CHANGED,还有个ACTION_CLOSE_SYSTEM_DIALOGS

    private final ContentObserver mObserver = new FavoritesChangeObserver();
    private final ContentObserver mWidgetObserver = new AppWidgetResetObserver();

前面那个oversver监视LauncherSettings.Favorites.CONTENT_URI,后面那个监视(LauncherProvider.CONTENT_APPWIDGET_RESET_URI

private static final LauncherModel sModel = new LauncherModel();

LauncherModel用来保存launcher所有运行时的变量到内存中,并提供数据库相关借口方便参数操作。系统一般只有一个Launcherodel,保证正常显示。




protected void onActivityResult(int requestCode, int resultCode, Intent data) 

是像ContextMenu这类返回Activityesul时对桌面图标拾起,移动和创建的比较主要的逻辑,功能包括
REQUEST_PICK_APPLICATION,
REQUEST_PICK_SHORTCUT,
REQUEST_CREATE_SHORTCUT,
REQUEST_PICK_LIVE_FOLDER,
REQUEST_CREATE_LIVE_FOLDER,
REQUEST_PICK_APPWIDGET
REQUEST_CREATE_APPWIDGET
REQUEST_PICK_APPWIDGET
REQUEST_CREATE_APPWIDGET
看名字基本能看出来是做啥的。


private SlidingDrawer mDrawer;

这个就是抽屉的成员了。
一个抽屉包括两部分(其实是SlidingDrawer包括两部分): handler(手可以拉的地方) Content(拉开之后你看见什么)



不写了。。。Launcher太大了
Launcher整个是个dragLayer,由两部分: workspace,slidingDrawer组成。
workspace就是大家喜闻乐见的桌面,默认4*4,16个格子的CellLayout
slidingDrawer就是大家喜闻乐见的抽屉以及垃圾桶,,反正nexus已经不用,估计会废弃
slidingDrawer作为一个抽屉,包括handler和content(allappsgridview)两部分,外加一个回收站deleteZone
喜欢研究的自己看看源码,比啥都强-v-,因为源码挺好懂的

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics