博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Launcher3 概述模式下单击无法添加小部件,长按拖动却可以
阅读量:6087 次
发布时间:2019-06-20

本文共 1435 字,大约阅读时间需要 4 分钟。

无法添加原因:屏幕横向跨度不匹配,findCellForSpan()方法return false; 在com.android.launcher3.widget.WidgetsPagedView类的onClick方法中点击添加小部件:

@Override    public void onClick(View v) {        if (!mLauncher.isWidgetsViewVisible()                || mLauncher.getWorkspace().isSwitchingState()                || !(v instanceof WidgetCell)) return;        if (v.getTag() instanceof ItemInfo) {            ItemInfo info = (ItemInfo) v.getTag();            mLauncher.getWorkspace().onWidgetCellClick(info,(WidgetCell)v);        }    }复制代码

进入onWidgetCellClick方法,问题出在这句代码

if(!dropTargetLayout.findCellForSpan(mTargetCell,minSpanX,minSpanY))复制代码

表现为组件ItemInfo的属性spanX的值,和其属性类型为 LauncherAppWidgetProviderInfo的属性spanX的值,大于我们设备默认跨度.比如当组件spanX=5,而我们设备spanX为4时,此组件就不会添加成功.

解决方法:通过上述代码可以发现ItemInfo是通过v.getTag()强制类型转换而来的,那么必然有v.setTag().我们在setTag时,传入修改后的对象,以达到适配屏幕宽度,成功添加组件的目的.

调试发现settag方法在com.android.launcher3.widget.WidgetCell的applyFromCellItem()中.修改如下:

public void applyFromCellItem(WidgetItem item, WidgetPreviewLoader loader) {   代码省略....        if (item.activityInfo != null) {            setTag(new PendingAddShortcutInfo(item.activityInfo));        } else {            //add by dx for Widths do not match and components cannot be added   start            mItem.widgetInfo.spanX =hSpan;            mItem.widgetInfo.spanY=vSpan;            //add by dx end            //设置小部件信息            setTag(new PendingAddWidgetInfo(mLauncher, item.widgetInfo));        }    }复制代码

转载地址:http://vxtwa.baihongyu.com/

你可能感兴趣的文章
python笔记
查看>>
js 字符串拼接
查看>>
软硬链接--tr操作--useradd练习
查看>>
wget命令
查看>>
Linux笔记 1-7 --进程
查看>>
Agile国人出品HTML5+CSS3+JS移动应用开发框架
查看>>
初学者怎么才能快速学会Python?
查看>>
诺贝尔奖
查看>>
python中的异常(try)
查看>>
iOS 使用 UIMenuController 且不隐藏键盘的方法
查看>>
PLSQL 之SQL分类和动态SQL
查看>>
JavaScript性能优化 DOM编程
查看>>
CentOS上安装redis记录
查看>>
JAVA第三次作业
查看>>
java string 中文转换UTF-8
查看>>
梓益C语言学习笔记之结构体-共用体-枚举
查看>>
联想手机如何root
查看>>
通过思科模拟器CISCO PACKET TRACER学习网络12——静态NAT
查看>>
【12c OCP】CUUG OCP认证071考试原题解析(36)
查看>>
MongoDB、Hbase、Redis等NoSQL优劣势、应用场景
查看>>