【问题标题】:Android Drag-n-Drop grid with LinearLayouts as drag items使用 LinearLayout 作为拖动项的 Android 拖放网格
【发布时间】:2012-11-07 18:29:50
【问题描述】:

我有一个网格的工作示例,它允许使用长触摸对项目进行重新排序以激活拖放操作。如果项目是简单的视图,一切都运行良好,例如TextViewImageView 但如果项目是 LinearLayouts 则仅显示布局本身。

我在这篇帖子中一直在使用 Tom Quinsn 的网格(感谢 Tom !!!):

Android Gridview drag and drop example

如果我派生我自己的LinearLayout 类并覆盖onLayout(),我可以让LinearLayouts 工作,但这迫使我在此函数的布局中硬编码子控件的位置。

理想情况下,我希望能够在 XML 文件中定义项目布局,并在将它们添加到处理网格的控件之前对其进行扩展。我猜出于某种原因,框架没有为 Tom 的代码中定义的 DraggableGridView 视图中包含的子级调用布局函数,但我不明白为什么会这样。

【问题讨论】:

    标签: android grid


    【解决方案1】:

    this 链接的帮助下,我正在开发自己的拖放应用程序。您可以将代码与 Tom Quesinsn 的代码进行比较。它还获取 GridView 的不同子级并将它们添加为“放置目标”,接受放置在它们上并复制您正在拖动的视图的图像。

    【讨论】:

      【解决方案2】:

      这是DraggableGridView 的一个已知问题——不幸的是——我还没有解决这个问题。当我写 DGV 时,我并没有完全掌握视图是如何布局的。您可以尝试让 DGV 在布置每个孩子之前对其进行测量。添加类似:

      getChildAt(i).measure(MeasureSpec.makeMeasureSpec(childSize, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(childSize, MeasureSpec.EXACTLY));
      

      在这一行的布局之前:

      getChildAt(i).layout(xy.x, xy.y, xy.x + childSize, xy.y + childSize);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-04
        • 1970-01-01
        相关资源
        最近更新 更多