launcher修改---launcher的搜索框和ProtipWidget(widget修改)(有图有真相)

来源:互联网 发布:树莓派3 ubuntu 编辑:程序博客网 时间:2024/05/29 16:35

      有的时候,对launcher的开发,需要去掉launcher上面的搜索框和ProtipWidget,另外,ProtipWidget是android从2.2版本以后才添加上的。在找寻了n久以后,经过网友的帮张,原来定义文件在Launcher2/res/xml/default_workspace.xml,下面把文件贴出来:

<?xml version="1.0" encoding="utf-8"?><favorites xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher">    <!--  Far-left screen [0] -->    <!--  Left screen [1] -->    <appwidget        launcher:packageName="com.google.android.apps.genie.geniewidget"        launcher:className="com.google.android.apps.genie.geniewidget.miniwidget.MiniWidgetProvider"        launcher:screen="1"        launcher:x="0"        launcher:y="0"        launcher:spanX="4"        launcher:spanY="1" />            <!--  Middle screen [2] -->    <search        launcher:screen="2"        launcher:x="0"        launcher:y="0" />    <appwidget        launcher:packageName="com.android.protips"        launcher:className="com.android.protips.ProtipWidget"        launcher:screen="2"        launcher:x="0"        launcher:y="1"        launcher:spanX="4"        launcher:spanY="1" />    <!--  Right screen [3] -->    <appwidget        launcher:packageName="com.android.music"        launcher:className="com.android.music.MediaAppWidgetProvider"        launcher:screen="3"        launcher:x="0"        launcher:y="0"        launcher:spanX="4"        launcher:spanY="1" />    <appwidget        launcher:packageName="com.android.vending"        launcher:className="com.android.vending.MarketWidgetProvider"        launcher:screen="3"        launcher:x="1"        launcher:y="1"        launcher:spanX="2"        launcher:spanY="2" />    <!--  Far-right screen [4] --></favorites>

然后,

 <!--  Middle screen [2] -->    <search        launcher:screen="2"//第几屏        launcher:x="0"//        launcher:y="0" />    <appwidget        launcher:packageName="com.android.protips"//widget所在的包名        launcher:className="com.android.protips.ProtipWidget"//所显示的widget        launcher:screen="2"//第几屏        launcher:x="0"//图标x的位置,左上角x为0,向右递增,0-5共6个        launcher:y="1"//图标y的位置,左上角y为0,向下递增,0-2共3个        launcher:spanX="4"//在x方向上所占的格数        launcher:spanY="1" />
这两个就是我们要找的搜索框和ProtipWidget(不知道该怎么翻译),search是google给我们提前定义好的,我们在这里直接使用就可以了,另外还有clock(闹钟)等。

       如果想在launcher上面添加什么快捷方式,ok,自己仿照以上形式添加即可,看哪个不顺眼,除去即可。

我们可以看一下他的效果图:



         而这个default_workspace.xml文件是如何被解析的呢?在launcher2的源代码里面有一个launcherProvider.java的类(635行),

 XmlResourceParser parser = mContext.getResources().getXml(R.xml.default_workspace);                AttributeSet attrs = Xml.asAttributeSet(parser);                XmlUtils.beginDocument(parser, TAG_FAVORITES);                final int depth = parser.getDepth();                int type;                while (((type = parser.next()) != XmlPullParser.END_TAG ||                        parser.getDepth() > depth) && type != XmlPullParser.END_DOCUMENT) {                    if (type != XmlPullParser.START_TAG) {                        continue;                    }                    boolean added = false;                    final String name = parser.getName();                    TypedArray a = mContext.obtainStyledAttributes(attrs, R.styleable.Favorite);                    values.clear();                                        values.put(LauncherSettings.Favorites.CONTAINER,                            LauncherSettings.Favorites.CONTAINER_DESKTOP);                    values.put(LauncherSettings.Favorites.SCREEN,                            a.getString(R.styleable.Favorite_screen));                    values.put(LauncherSettings.Favorites.CELLX,                            a.getString(R.styleable.Favorite_x));                    values.put(LauncherSettings.Favorites.CELLY,                            a.getString(R.styleable.Favorite_y));                    if (TAG_FAVORITE.equals(name)) {                        added = addAppShortcut(db, values, a, packageManager, intent);                    } else if (TAG_SEARCH.equals(name)) {                        added = addSearchWidget(db, values);                    } else if (TAG_CLOCK.equals(name)) {                        added = addClockWidget(db, values);                    } else if (TAG_APPWIDGET.equals(name)) {                        added = addAppWidget(db, values, a, packageManager);                    } else if (TAG_SHORTCUT.equals(name)) {                        added = addUriShortcut(db, values, a);                    }                    if (added) i++;                    a.recycle();                }

在这里提供了对文件的解析,大家可以看到,widget信息是被存储到数据库中的。另外,ProtipWidget是android从2.2版本以后才添加上的。
原创粉丝点击