Launcher8.0启动流程的第四步,第2小步。定义OverViewPanel,关于OverViewPanel的布局整体在res里面以xml文件形式存在,而对于其细节层面,比如点击之后有什么用则再java层详细定义,而第2小步则是定义OverViewPanel三个按钮的功能。
在setupView的完整源码,以setupOverviewPanel方法为分界线,分为3小步。说明setupOverviewPanel非常复杂。和setupview方法一样,setupOverviewPanel也是在Launcher类里面。所创建内容服务于Launcher整体。
那么什么是OverviewPanel?
在Launcher使用时,长按桌面空白处,我们会发现,workspace缩小,hotseat消失,并且在下方出现三个选项:wallpapers,widget,home settings 这个提供特殊选项的栏,就叫做OverviewPanel
其源码如下:
private void setupOverviewPanel() {
mOverviewPanel = (ViewGroup) findViewById(R.id.overview_panel);
View wallpaperButton = findViewById(R.id.wallpaper_button);
new OverviewButtonClickListener(ControlType.WALLPAPER_BUTTON) {
@Override
public void handleViewClick(View view) {
onClickWallpaperPicker(view);
}
}.attachTo(wallpaperButton);
wallpaperButton.setOnTouchListener(getHapticFeedbackTouchListener());
mWidgetsButton = findViewById(R.id.widget_button);
new OverviewButtonClickListener(ControlType.WIDGETS_BUTTON) {
@Override
public void handleViewClick(View view) {
onClickAddWidgetButton(view);
}
}.attachTo(mWidgetsButton);
mWidgetsButton.setOnTouchListener(getHapticFeedbackTouchListener());
View settingsButton = findViewById(R.id.settings_button);
boolean hasSettings = hasSettings();
if (hasSettings) {
new OverviewButtonClickListener(ControlType.SETTINGS_BUTTON) {
@Override
public void handleViewClick(View view) {
onClickSettingsButton(view);
}
}.attachTo(settingsButton);
settingsButton.setOnTouchListener(getHapticFeedbackTouchListener());
} else {
settingsButton.setVisibility(View.GONE);
}
mOverviewPanel.setAlpha(0f);
}
源码逻辑清晰,首先获取overview_panel的View,然后依次创建wallpaper,widget,settings这3个buttom。
overview_panel是oncreate流程第三步统一创建对象的时候,在UI布局文件Launcher.xml里面提到的多个组成Launcher的其中之一。核心就是三个button。
首先认真研读第一个wallpaperButton 的创建,而后举一反三。