1.Launcher默认界面配置(default_workspace)
Launcher的界面是默认读取一个xml配置文件,完成配置工作。这个配置文件在Launcher目录下,路径是:\Launcher\res\xml\default_workspace.xml 。这个XML文件就是刚升级,Launcher第一次显示的时候,会读取的配置文件。
default_workspace。xml里面可以配置APP快捷方式、Widget、Search搜索栏等。下面就常用的这几个属性进行解析:
//Edited by mythou
//http://www.cnblogs.com/mythou/
快捷方式说明
<favorite //程序快捷键属性标签
launcher:className="com.apical.radio.radioMainActivity" //该应用的类,点击图标时,需要启动的类
launcher:packageName="com.apical.radio" //该应用的包名
launcher:screen="1" //第1屏,0-4屏共5屏
launcher:x="0" //图标X位置,左上角第一个为0,向右递增,0-4共5个
l0auncher:y="0" //图标Y位置,左上角第一个为0,向下递增,0-2共3个
/>
//Edited by mythou //http://www.cnblogs.com/mythou/
//桌面Widget的标签
<appwidget //插件
launcher:className="de.dnsproject.clock_widget_main.Clock1AppWidgetProvider" //该应用的类
launcher:packageName="de.dnsproject.clock_widget_main" //该应用的包名
launcher:screen="1" //第1屏,0-4屏共5屏
launcher:x="2" //图标X位置,左上角第一个为0,向左递增,0-4共5个
launcher:y="1" //图标Y位置,左上角第一个为0,向下递增,0-2共3个
launcher:spanX="3" //在x方向上所占格数
launcher:spanY="2" />
<search //搜索栏 launcher:screen="1" //第2屏 launcher:x="0" //图标X位置 launcher:y="1"/> //图标Y位置
<folder//文件夹
launcher:container="-100"
launcher:screen="1"
launcher:title="@string/accessibility_all_apps_button"
launcher:x="0"
launcher:y="3" >
<favorite
launcher:className="com.android.settings.Settings"
launcher:container="1"
launcher:packageName="com.android.settings"
launcher:screen="0"
launcher:x="0"
launcher:y="0" />
<favorite
launcher:className="com.kylindev.henengptt.app.LoginActivity"
launcher:container="1"
launcher:packageName="com.kylindev.henengptt"
launcher:screen="0"
launcher:x="1"
launcher:y="0" />
<favorite
launcher:className="com.android.deskclock.DeskClock"
launcher:container="1"
launcher:packageName="com.android.deskclock"
launcher:screen="0"
launcher:x="2"
launcher:y="0" />
</folder>
2、LauncherProvider.java的loadFavorites分析:
//传入default_workspace文件的资源ID和数据库实力,把xml里面数据解析,保存到Launcher数据库。返回总共解析了多少个标签。
private int loadFavorites(SQLiteDatabase db, WorkspaceLoader loader) {
ArrayList<Long> screenIds = new ArrayList<Long>();// TODO: Use multiple loaders with fall-back and transaction.
int count = loader.loadLayout(db, screenIds);
// Add the screens specified by the items above
Collections.sort(screenIds);
int rank = 0;
ContentValues values = new ContentValues();
for (Long id : screenIds) {
values.clear();
values.put(LauncherSettings.WorkspaceScreens._ID, id);
values.put(LauncherSettings.WorkspaceScreens.SCREEN_RANK, rank);
if (dbInsertAndCheck(this, db, TABLE_WORKSPACE_SCREENS, null, values) < 0) {
throw new RuntimeException("Failed initialize screen table"
+ "from default layout");
}
rank++;
}
// Ensure that the max ids are initialized
mMaxItemId = initializeMaxItemId(db);
mMaxScreenId = initializeMaxScreenId(db);
return count;
}