Android中源码Launcher主屏幕程序排列详解【安卓Launcher进化一】

最近研究Lancher,从短信Mms的框架中过度到Launcher的bug和需求修改中,下面对launcher最简单的主屏幕程序的程序的布局的详 解,给读者一个入门的感觉,android的主屏幕一共分为5个屏幕,从左到右依次是:0,1,2,3,4。所以想在那个主屏幕放哪些程序或者 widget都可以在布局文件中实现,下面我就说说这个布局文件default_workspace.xml。这是对主屏幕进行排列的布局文件,在这里面 写好,程序运行后就可以实现哪个屏幕放那些特定的程序或widget了。下面先看截图,分别为图(1)和图(2)。图(1)为3屏即为主屏的布局,最下面 放了4个程序的快捷方式。图(2)为我粗糙地画了一个大概的一个面貌,屏幕一般被分为2维坐标的,左上角为原点(0,0),横向的为x轴(坐标向右依次加 1,分别是0,1,2,3),竖向的为y轴(向下依次加1,分别是0,1,2,3)。先看截图,下面看布局文件中的代码:

(1)                                                                                                


 图(2)

下面看布局文件中的代码:

Java代码  

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- Copyright (C) 2009 The Android Open Source Project
  3. Licensed under the Apache License, Version 2.0 (the "License");
  4. you may not use this file except in compliance with the License.
  5. You may obtain a copy of the License at
  6. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. -->
  13. <favorites xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher">
  14. <!--  Far-left screen [0] -->
  15. <!--  Left screen [1] -->
  16. <appwidget
  17. launcher:packageName="com.google.android.apps.genie.geniewidget"
  18. launcher:className="com.google.android.apps.genie.geniewidget.miniwidget.MiniWidgetProvider"
  19. launcher:screen="1"
  20. launcher:x="0"
  21. launcher:y="0"
  22. launcher:spanX="4"
  23. launcher:spanY="1" />
  24. <!--  Middle screen [2] -->
  25. <search
  26. launcher:screen="2"
  27. launcher:x="0"
  28. launcher:y="0" />
  29. <appwidget
  30. launcher:packageName="com.android.protips"
  31. launcher:className="com.android.protips.ProtipWidget"
  32. launcher:screen="2"
  33. launcher:x="0"
  34. launcher:y="1"
  35. launcher:spanX="4"
  36. launcher:spanY="1" />
  37. <favorite
  38. launcher:packageName="com.android.Mms"
  39. launcher:className="com.android.Mms.MainActivity"
  40. launcher:screen="2"
  41. launcher:x="0"
  42. launcher:y="3"
  43. />
  44. <favorite
  45. launcher:packageName="com.android.phone"
  46. launcher:className="com.android.phone.MainActivity"
  47. launcher:screen="2"
  48. launcher:x="1"
  49. launcher:y="3"
  50. />
  51. <favorite
  52. launcher:packageName="com.android.Email"
  53. launcher:className="com.android.Email.MainActivity"
  54. launcher:screen="2"
  55. launcher:x="2"
  56. launcher:y="3"
  57. />
  58. <favorite
  59. launcher:packageName="com.android.yuemei"
  60. launcher:className="com.android.yuemei.MainActivity"
  61. launcher:screen="2"
  62. launcher:x="3"
  63. launcher:y="3"
  64. />
  65. <!--  Right screen [3] -->
  66. <appwidget
  67. launcher:packageName="com.android.music"
  68. launcher:className="com.android.music.MediaAppWidgetProvider"
  69. launcher:screen="3"
  70. launcher:x="0"
  71. launcher:y="0"
  72. launcher:spanX="4"
  73. launcher:spanY="1" />
  74. <appwidget
  75. launcher:packageName="com.android.vending"
  76. launcher:className="com.android.vending.MarketWidgetProvider"
  77. launcher:screen="3"
  78. launcher:x="1"
  79. launcher:y="1"
  80. launcher:spanX="2"
  81. launcher:spanY="2" />
  82. <!--  Far-right screen [4] -->
  83. </favorites>

      标签讲解:

             <appwidget>为添加相应的widget;

             <search>为添加google搜索框;

             <favorite>为添加程序的快捷方式;

      属性讲解:

              launcher:packageName="com.android.vending "  程序的包的名字。

              launcher:className="com.android.vending.MarketWidgetProvider"  程序入口类的名字。

              launcher:screen="3" 表示在屏幕的位置,从左向右依次为:0,1,2,3,4.共5屏,第2屏为主屏幕。

              launcher:x="1" 在X轴的位置,如图(2)所画。向右依次增加,分别为0,1,2,3.共4个。

              launcher:y="1" 在Y轴的位置,如图(2)所画。向下依次增加,分别为0,1,2,3.共4个。

              launcher:spanX="4" 在X轴上占的格数。"4"代表占4格。

              launcher:spanY="2" 在Y轴上占的格数,"2"代表占2格。

     编译说明:

            (1)先build完成;有问题可以参考Android在Linux下编译源码【安卓进化二十八】

            (2)在mm完成后,push到手机中:

                         adb  push   ../../out/target/product/n80w/system/app/Launcher.apk   system/app/

            (3)进入烧录手机的红屏幕界面。开机键和音量减小的键一起按。

            (4)用root权限进入../out/host/linux_x86/bin/目录下,输入命令:

                     #./fastboot  -w     清除 userdata 和 cache 。目的:确保得到你想要的效果!

            (5)最后重启手机即可:或者输入命令:./fastboot  reboot

                                                        或者干脆点扣电池重启。事先声明:此招为大明习惯,操作过程中手机出现任何问题,本人概不负责。             

             这样五步骤就得到了你想要的效果了。

时间: 2024-12-13 19:15:03

Android中源码Launcher主屏幕程序排列详解【安卓Launcher进化一】的相关文章

【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)

作者 : 韩曙亮  博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csdn.net/shulianghan VLC 二次开发 视频教程 : http://edu.csdn.net/course/detail/355 博客总结 : -- 本博客目的 : 让 Android 开发者通过看本博客能够掌握独立移植 VLC Media Player 核心框架到自己的 app 中,

Android源码分析--Handler和Looper机制详解

在Android系统中的应用程序,与Java的应用程序相同,都是靠消息驱动,简单的说就是:有一个消息队列,我们可以不断的向这个消息队列中添加消息,并从中取出消息,处理消息.Android中与此工作相关的主要是由Handler,Looper以及Message来完成. Looper类:为一个线程运行着一个消息循环,内部有一个消息队列,每一个线程只允许最多存在一个Looper: Handler类:允许你向一个线程的消息队列中发送消息,处理消息: Message类:消息类. 使用样例 首先,我们通过一个

jQuery 源码分析(十八) ready事件详解

ready事件是当DOM文档树加载完成后执行一个函数(不包含图片,css等),因此它的触发要早于load事件.用法: $(document).ready(fun) ;fun是一个函数,这样当DOM树加载完毕后就会执行该匿名函数了 ready有一个简写,可以直接传入$(fun)即可,这是因为在jQuey内部也定义了一个$(document)的jQuery对象,和我们在上面的写法是一样的 ready事件和window的onload区别: ready事件 ;等dom树载完毕后就可以执行 onload事

jquery源码解析:jQuery工具方法详解1

jQuery的工具方法,其实就是静态方法,源码里面就是通过extend方法,把这些工具方法添加给jQuery构造函数的. jQuery.extend({       //当只有一个对象时,就把这个对象中的属性和方法扩展到this对象中,这里的this指向jQuery expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ), //唯一性,core_version 为jQuery

jquery源码解析:jQuery工具方法详解2

jQuery的工具方法,其实就是静态方法,源码里面就是通过extend方法,把这些工具方法添加给jQuery构造函数的. jQuery.extend({ ...... type: function( obj ) {    //$.type(),判断类型 if ( obj == null ) {   //null,undefined return String( obj );    //返回null,undefined字符串 }     //core_toString = {}.toString 

jquery源码解析:jQuery工具方法详解3

jQuery的工具方法,其实就是静态方法,源码里面就是通过extend方法,把这些工具方法添加给jQuery构造函数的. jQuery.extend({ ...... each: function( obj, callback, args ) {   //$.each(arr , function(i,value){}),第三个参数用于内部调用.此方法就是来遍历数组的,然后取数组中的值进行显示.不能改变原数组arr,跟map一样,但是map返回新数组,而each返回原数组.这里跟原生的forEa

nginx1.6.3源码安装,centos6系统下详解

nginx官网: http://nginx.org/en/download.html wget http://nginx.org/download/nginx-1.6.3.tar.gz tar zxvf nginx-1.6.3.tar.gz -C /opt/nginx cd !$ ./configure    初始化配置 如果报错:说明没有安装PCRE library库文件 安装pcre后即可初始化成功,显示nginx的安装路径 make && make install    编译安装 c

ZRender源码分析5:Shape绘图详解

回顾 上一篇说到:ZRender源码分析4:Painter(View层)-中,这次,来补充一下具体的shape 关于热区的边框 以圆形为例: document.addEventListener('DOMContentLoaded', function () { var canvasDom = document.getElementById('canvasId'), context = canvasDom.getContext('2d'); context.lineWidth = 50; cont

jquery源码解析:jQuery工具方法详解4

jQuery的工具方法,其实就是静态方法,源码里面就是通过extend方法,把这些工具方法添加给jQuery构造函数的. jQuery.extend({ ...... guid: 1, //唯一标识符,跟事件有关.举个例子:function show(){alert(this);}, $("#input1").click(show),$("#input2").click(function(){$("#input1").off()}),这里的sho