android BSP开发之五(Launcher 其他设定)

1.调整Home screen上Hotseat, Google folder , Play store.
在开发过程中,如果要求更改Hotseat和Google folder中的某些APP, 或者这些APP在home screen中的位置,则可以在vendor/partner_gms/apps/GmsSampleIntegration/res_dhs_full/xml/partner_default_layout.xml文件中修改.
<favorites><!-- Hotseat (We use the screen as the position of the item in the hotseat) --><!-- Dialer Messaging Calendar Contacts Camera --><favorite container="-101" screen="0" x="0" y="0" packageName="com.google.android.gm" className="com.google.android.gm.ConversationListActivityGmail"/>......<!-- <favorite container="-101" screen="4" x="4" y="0" packageName="org.codeaurora.snapcam" className="com.android.camera.CameraLauncher"/> --><!-- In Launcher3, workspaces extend infinitely to the right, incrementing from zero --><!-- Google folder --><!-- Google, Chrome, Gmail, Maps, YouTube, (Drive), (Music), (Movies), Duo, Photos --><folder title="@string/google_folder_title" screen="0" x="0" y="3"><favorite packageName="com.google.android.googlequicksearchbox" className="com.google.android.googlequicksearchbox.SearchActivity"/>......<favorite packageName="com.google.android.apps.photos" className="com.google.android.apps.photos.home.HomeActivity"/></folder><favorite screen="0" x="3" y="3" packageName="com.android.vending" className="com.android.vending.AssetBrowserActivity"/>
</favorites>

Container="-101": 代表属于Hotseat

Screen=”0”: 代表home screen

X=3, y=3 : 意思是home screen上为4x4, 位置右下角, x=0,y=0在左上角.在Bobcat上x=0,y=0会不可见,x=0这一行被date widget挡住.



2.横屏情况不显示Icon name

XXX设备上竖屏转到横屏的情况,会出现home screen上除Hotseat以外的Icon是不显示icon name的,这个时候需要修改packages/apps/Launcher3/src/com/android/launcher3/DeviceProfile.java文件中的updateIconSize方法

 private void updateIconSize(float scale, Resources res, DisplayMetrics dm) {// Workspacefinal boolean isVerticalLayout = isVerticalBarLayout();......// All appsallAppsIconTextSizePx = iconTextSizePx;…...if (isVerticalLayout) {// 如果为横屏则执行隐藏// Always hide the Workspace text with vertical bar layout.AdjustToHideWorkspaceLabels();  //该方法为隐藏icon name  }// Hotseatif (isVerticalLayout) {hotseatBarSizePx = iconSizePx + hotseatBarSidePaddingStartPx+ hotseatBarSidePaddingEndPx;}hotseatCellHeightPx = iconSizePx;.......// Folder iconfolderIconSizePx = IconNormalizer.getNormalizedCircleSize(iconSizePx);folderIconOffsetYPx = (iconSizePx - folderIconSizePx) / 2;}

3.调整Hotseat到屏幕底部或者右侧

如果想强制调整Hotseat区域到屏幕底部,右侧或者左侧,可以修改packages/apps/Launcher3/src/com/android/launcher3/Hotseat.java
 

  public void setInsets(Rect insets) {FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) getLayoutParams();DeviceProfile grid = mActivity.getWallpaperDeviceProfile();insets = grid.getInsets();if (grid.isVerticalBarLayout()) {lp.height = ViewGroup.LayoutParams.MATCH_PARENT;if (grid.isSeascape()) {lp.gravity = Gravity.LEFT;lp.width = grid.hotseatBarSizePx + insets.left;} else {lp.gravity = Gravity.RIGHT;lp.width = grid.hotseatBarSizePx + insets.right;}} else {lp.gravity = Gravity.BOTTOM;lp.width = ViewGroup.LayoutParams.MATCH_PARENT;lp.height = grid.hotseatBarSizePx + insets.bottom;//lp.bottomMargin 可以调整这个值增大hotseat 区域与边框的距离,需要把下面setpadding注释掉}Rect padding = grid.getHotseatLayoutPadding();setPadding(padding.left, padding.top, padding.right, padding.bottom);setLayoutParams(lp);InsettableFrameLayout.dispatchInsets(this, insets);}

4.强制设定home screen横竖屏一样布局


修改packages/apps/Launcher3/res/values/config.xml文件中hotseat_transpose_layout_with_orientation的值为false.


5.取消橫屏下右側滾動條旁邊空白區域


修改packages/apps/Launcher3/src/com/android/launcher3/allapps/AllAppsContainerView.java文件中setInsets方法:
 

public void setInsets(Rect insets) {DeviceProfile grid = mLauncher.getDeviceProfile();int leftRightPadding = grid.desiredWorkspaceLeftRightMarginPx+ grid.cellLayoutPaddingLeftRightPx;for (int i = 0; i < mAH.length; i++) {mAH[i].adapter.setAppsPerRow(grid.inv.numAllAppsColumns);mAH[i].padding.bottom = insets.bottom;mAH[i].padding.left = mAH[i].padding.right = leftRightPadding;mAH[i].applyPadding();}ViewGroup.MarginLayoutParams mlp = (MarginLayoutParams) getLayoutParams();if (grid.isVerticalBarLayout()) {mlp.leftMargin = insets.left;mlp.rightMargin = insets.right;Log.i("WKS1","AllAppsContainerView -> setInsets ");
//            setPadding(grid.workspacePadding.left, 0, grid.workspacePadding.right, 0);//設定距離左右兩邊的距離setPadding(grid.verticalDragHandleSizePx, 0, grid.verticalDragHandleSizePx, 0);or setPadding(grid.cellLayoutPaddingLeftRightPx, 0, grid.cellLayoutPaddingLeftRightPx, 0);} else {mlp.leftMargin = mlp.rightMargin = 0;setPadding(0, 0, 0, 0);}setLayoutParams(mlp);InsettableFrameLayout.dispatchInsets(this, insets);mLauncher.getAllAppsController().setScrollRangeDelta(mSearchUiManager.getScrollRangeDelta(insets));}

6.NON-GMS 修改Desktop上的search bar


6.1 Search bar的输入框中有google字体提示,desktop上的search bar的布局文件为”packages/apps/QuickSearchBox/res/layout/search_widget.xml”, 出现google提示是因为search_widget_text这个textview使用了”android:background="@drawable/textfield_search_empty_google"”属性,解决办法注释res/drawable/textfield_search_empty_google.xml文件中的src属性:
 

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@drawable/textfield_search_empty" /><!-- 注释下面内容 --><item><bitmap android:src="@drawable/hint_google" android:gravity="left|center_vertical" /></item> </layer-list>

6.2开机后search bar上会有voice按钮,显示几秒后自动消失.
解决办法修改res/layout/search_widget.xml文件中的voice ImageButton。
 

        <ImageButtonandroid:id="@+id/search_widget_voice_btn"android:layout_width="wrap_content"android:layout_height="match_parent"android:background="@drawable/btn_search_dialog_voice"android:src="@drawable/ic_btn_speak_now"android:layout_marginRight="-4dip"android:visibility="gone"/>

6.3点击search bar后,出现的输入框右边会有voice 按钮
解决办法修改res/layout/search_activity.xml文件中的voice ImageButton
 

<ImageButtonandroid:id="@+id/search_voice_btn"android:layout_width="wrap_content"android:layout_height="match_parent"android:background="@drawable/btn_search_dialog_voice"android:src="@drawable/ic_btn_speak_now"android:layout_marginRight="-4dip"android:visibility="gone"/>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/168447.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python之pyqt专栏3-QT Designer

从前面两篇文章python之pyqt专栏1-环境搭建与python之pyqt专栏2-项目文件解析&#xff0c;我们对QT Designer有基础的认识。 QT Designer用来创建UI界面&#xff0c;保存的文件是"xxx.ui"文件&#xff0c;"xxx.ui"可以被pyuic转换为"xxx.py",而&…

Spring AOP:什么是AOP? 为什么要用AOP?如何学习AOP?

文章目录 &#x1f386;前言1.为什么要用 AOP3.如何学习去 AOP?3.1 AOP 的组成切面&#xff08;Aspect&#xff09;连接点&#xff08;Join Point&#xff09;切点&#xff08;Pointcut&#xff09;通知&#xff08;Advice&#xff09; 3. Spring AOP 实现3.1 普通的方式实现 …

Ubuntu20.04安装搜狗输入法

1、安装包下载 搜狗输入法linux-首页搜狗输入法for linux—支持全拼、简拼、模糊音、云输入、皮肤、中英混输https://shurufa.sogou.com/linux点击立即下载&#xff0c;根据自己的硬件选择deb安装包。 2、输入法安装 当第一步完成以后&#xff0c;页面会自动跳转至搜狗的安装…

【opencv】计算机视觉:实时目标追踪

目录 前言 解析 深入探究 前言 目标追踪技术对于民生、社会的发展以及国家军事能力的壮大都具有重要的意义。它不仅仅可以应用到体育赛事当中目标的捕捉&#xff0c;还可以应用到交通上&#xff0c;比如实时监测车辆是否超速等&#xff01;对于国家的军事也具有一定的意义&a…

25 Linux I2C 驱动

一、I2C简介 I2C老朋友了&#xff0c;在单片机里面也学过&#xff0c;现在再复习一下。I2C使用两条线在主控制器和从机之间进行数据通信。一条是 SCL(串行时钟线)&#xff0c;另外一条是 SDA(串行数据线)&#xff0c;这两条数据线需要接上拉电阻&#xff0c;总线空闲的时候 SCL…

docker部署phpIPAM

0说明 IPAM&#xff1a;IP地址管理系统 IP地址管理(IPAM)是指的一种方法IP扫描&#xff0c;IP地址跟踪和管理与网络相关的信息的互联网协议地址空间和IPAM系统。 IPAM软件和IP的工具,管理员可以确保分配IP地址仍然是当前和足够的库存先进的IP工具和IPAM服务。 IPAM简化并自动化…

开源大模型框架llama.cpp使用C++ api开发入门

llama.cpp是一个C编写的轻量级开源类AIGC大模型框架&#xff0c;可以支持在消费级普通设备上本地部署运行大模型&#xff0c;以及作为依赖库集成的到应用程序中提供类GPT的功能。 以下基于llama.cpp的源码利用C api来开发实例demo演示加载本地模型文件并提供GPT文本生成。 项…

管理类联考——数学——汇总篇——知识点突破——代数——函数——记忆

文章目录 整体文字提炼图像绘画 考点记忆/考点汇总——按大纲 本篇思路&#xff1a;根据各方的资料&#xff0c;比如名师的资料&#xff0c;按大纲或者其他方式&#xff0c;收集/汇总考点&#xff0c;即需记忆点&#xff0c;在通过整体的记忆法&#xff0c;比如整体信息很多&am…

中国天然径流量格点数据集CNRD v1.0(1961-2018)

简介 中国天然径流量是指在中国境内自然形成的各种河流、湖泊、水库等水体中自然产生的流量。根据中国水利部的数据,中国天然径流量在年际变化和地区分布上都非常不均衡。北方地区径流量较小,南方地区则较大;而东部沿海地区的水资源较为丰富,而西北干旱地区的水资源则非常…

电源控制系统架构(PCSA)之系统控制处理器组件

目录 6.4 系统控制处理器 6.4.1 SCP组件 SCP处理器Core SCP处理器Core选择 SCP处理器核内存 系统计数器和通用计时器 看门狗 电压调节器控制 时钟控制 系统控制 信息接口 电源策略单元 传感器控制 外设访问 系统访问 6.4 系统控制处理器 系统控制处理器(SCP)是…

基于Python 中创建 Sentinel-2 RGB 合成图像

一、前言 下面的python代码将带您了解如何从原始 Sentinel-2 图像创建 RGB 合成图像的过程。 免费注册后&#xff0c;可以从 Open Access Hub 下载原始图像。 请注意&#xff0c;激活您的帐户可能需要 24 小时&#xff01; 二、准备工作 &#xff08;1&#xff09;导入必要的库…

selenium的基础语法

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️山水速疾来去易&#xff0c;襄樊镇固永难开 ☁️定位页面的元素 参数:抽象类By里…

springboot 开启和关闭kafka消费

关闭kafka自动消费 配置自定义容器工厂 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.kafka.config.C…

【从删库到跑路 | MySQL总结篇】数据库基础(增删改查的基本操作)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】&#x1f388; 本专栏旨在分享学习MySQL的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 重点放前面&am…

Android frameworks 开发总结之八

Quick Settings增加一項 XXX device要求在quick settings中增加一項touch panel. 在/frameworks/base/packages/SystemUI/res/values/config.xml文件中的quick_settings_tiles_default string 中增加touch panel。並在String resource文件中增加顯示的title <!-- The def…

网络数据结构skb_buff原理

skb_buff基本原理 内核中sk_buff结构体在各层协议之间传输不是用拷贝sk_buff结构体&#xff0c;而是通过增加协议头和移动指针来操作的。如果是从L4传输到L2&#xff0c;则是通过往sk_buff结构体中增加该层协议头来操作&#xff1b;如果是从L4到L2&#xff0c;则是通过移动sk_…

Kafka(五)消费者回调 +定时重试 + 理解Rebalance

文章目录 消费者回调如何抽象callBack消息&#xff1f;为什么要设置serverId?如何消费callBack消息&#xff1f; 定时重试消息失败表的设计重试逻辑设计 理解Rabalance通过日志来理解rebalance 参考资料结语示例源码仓库 消费者回调 有些邮件发送成功之后&#xff0c;需要执行…

【Linux】fork()

文章目录 一、fork()是什么&#xff1f;二、fork()干了什么&#xff1f;三、fork()怎么用&#xff1f; 一、fork()是什么&#xff1f; fork()函数其实是在Linux系统中用于创建一个新的进程。让我们看看Linux中是怎么描述的&#xff1f;运行man fork。 RETURN VALUE On success…

php站点伪静态配置(Apache+Linux)

404报错&#xff1a; 404 Not Found nginx/1.15.11 问题解决&#xff1a; 1、Linux location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s/$1 last; } } 2、Apache <IfModule mod_rewrite.c> RewriteEngine on RewriteBase / RewriteCond %{REQU…

英特尔和 ARM 将合作开发移动芯片技术,如何看待双方合作?

英特尔和 ARM 将合作开发移动芯片技术&#xff0c;如何看待双方合作&#xff1f; 最近市场传出Arm要自产芯片&#xff0c;供智能手机与笔电等使用后&#xff0c;外媒指Arm自产芯片将由英特尔晶圆代工部门打造&#xff0c;变成英特尔晶圆代工客户。将采用英特尔18A工艺&#xff…