Android Launcher3分析和修改 -------加载布局

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;
        }

猜你喜欢

转载自blog.csdn.net/qingcai_yuanzi/article/details/80190271