Launcher3 概述模式下单击无法添加小部件,长按拖动却可以

无法添加原因:屏幕横向跨度不匹配,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));
        }
    }
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值