Android桌面图标布局,android安装运行launcher并修改桌面图标

以系统及程序的方式安装和运行Launcher,才能在Launcher启动的时候就让默认的AppWidget程序显示出来。否则将会出现

java.lang.SecurityException: bindGagetId appWidgetId=843

provider=ComponentInfo{com.android.quicksearchbox/com.android.quicksearchbox.SearchWidgetProvider}:

User 10047 does not have android.permission.BIND_APPWIDGET

这样的错误。

emulator -avd 1024_600_API8 -partition-size 128

——此处的 -partition-size 128 表示为

把system分区扩大为128MB,若有需要,此处可以设置为更大的system分区

此处的 1024_600_API8 表示为 模拟器名称换成你们自己的就可以

adb remount

——使得/system分区可以进行写操作, 否则下面的push指令将会出现形如“failed to copy

'Launcher2_custom.apk' to system/app/Launcher2_meiling.apk':

Read-only file system”的错误提示,真机亦是如此。

adb push Launcher2_custom.apk /system/app

当不再需要这个定制化的Launcher apk的时候,直接 adb

shell模式下删除/system/app下的对应apk文件即可,删除时要有超级用户权限

rm /system/app/Launcher2_custom.apk

1、/packages/apps/Launcher/res/xml/default_workspace.xml中记录了系统初始化或者恢复出厂设置时桌面上图标的排列。Launcher程序第一次运行完毕以后,会在/data/data/com.android.launcher/databases/launcher.db中创建记录,里面有所有当前的桌面图标。以后每次启动只会从这里读取桌面图标。

下面简单分析一下default_workspace.xml:

default_workspace.xml中,支持的标签有:

favorite:应用程序快捷方式。

shortcut:链接,如网址,本地磁盘路径等。

search:搜索框。

clock:桌面上的钟表Widget

支持的属性有:

launcher:title,图标下面的文字,目前只支持引用,不能直接书写字符串。

launcher:icon,图标引用。

launcher:uri,链接地址。

launcher:packageName,应用程序的包名。

launcher:className,应用程序的启动类名。

launcher:screen,图标所在的屏幕编号。

launcher:x,图标在横向排列上的序号。

launcher:y,图标在纵向排列上的序号。

launcher:spanX="9"

——这个AppWidget在screen中的cell跨度-x

launcher:spanY="5" ——这个AppWidget在screen中的cell跨度-y

LauncherProvider.java里面的loadFavorites方法负责解析。

2、在Launcher2源码的Launcher.java中,定义如下:

static final

int SCREEN_COUNT = 4; ——Launcher包含几个screen

static final

int DEFAULT_SCREEN = 0; ——Launcher启动后默认显示的是哪个screen

static final

int NUMBER_CELLS_X = 9; ——每个screen所对应的CellLayout中横向包括多少个Cells

static final

int NUMBER_CELLS_Y = 5; ——每个screen所对应的CellLayout中纵向包括多少个Cells

3、而在default_workspace.xml中添加的AppWidget的例子如下:

launcher:packageName="com.ml.apps"

launcher:className="com.ml.apps.TimeTemperInfoReceiver"

launcher:screen="0" ——在哪个screen中显示这个widget

launcher:x="0" ——这个AppWidget在screen中的起始cell-x

launcher:y="0" ——这个AppWidget在screen中的起始cell-y

launcher:spanX="9" ——这个AppWidget在screen中的cell跨度-x

launcher:spanY="5" ——这个AppWidget在screen中的cell跨度-y

/>

4、上面在default_workspace.xml中添加的appwidget布局必须和对应应用程序中的AppWidget设定相适应,否则无法正确显示。AppWidget对应应用程序的res/xml/下包含一个widget布局描述文件,例如home_widget_provider.xml,对应内容如下:

http://schemas.android.com/apk/res/android"

android:minHeight="368dp"

android:minWidth="664dp"

android:initialLayout="@layout/cell_main"

android:updatePeriodMillis="0">

注意:

此处在设置android:minHeight和android:minWidth的时候,实际是设置widget占据了多少个cell。

根据实践效果来看,貌似无论在dimens.xml文件中定义的workspace_cell_width 和

workspace_cell_height 的具体值是多少,在这里x和y方向一律按照每个cell 74dp

来设置android:minHeight和android:minWidth的值,即74×cell_numbers-2。例如上述(3)中定义的launcher:spanX="9",launcher:spanY="5",则在此处

android:minHeight="368dp"(5×74-2),android:minWidth="664dp"(9*74-2)

5、经过上述4步,基本工作就完成了,然后将AppWidget对应的应用程序和Launcher程序push进/system分区,即:

adb push TimerTemperInfo.apk /system/app

adb push Launcher2_meiling.apk /system/app

即可。实践表明这两个apk程序push的顺序似乎没有什么影响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值