Android中源码Launcher主屏幕程序排列详解

2024-03-20 19:58

本文主要是介绍Android中源码Launcher主屏幕程序排列详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自: http://blog.csdn.net/wdaming1986/article/details/6978814


最近研究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)


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

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


这篇关于Android中源码Launcher主屏幕程序排列详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/830575

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Java中的.close()举例详解

《Java中的.close()举例详解》.close()方法只适用于通过window.open()打开的弹出窗口,对于浏览器的主窗口,如果没有得到用户允许是不能关闭的,:本文主要介绍Java中的.... 目录当你遇到以下三种情况时,一定要记得使用 .close():用法作用举例如何判断代码中的 input