Android:具有不同元素大小,可调整大小,可拖动和水平分页的主屏幕

问题描述 投票:-1回答:1

我正在开发一个新的App,它将具有2 x 4的主屏幕。在有可用空间的情况下,每个项目都可以调整为2(1x2)或4(2x2)单元的大小。网格还必须包含空白,以便可以调整其他元素的大小。假设您可能只有6个项目,并且2个空格应显示为空白。要更改项目的位置,可以将其拖放到所需的位置,这也可以通过分页进行,因此可以将其拖动到另一页并放到该页面或与该相应页面的某些项目交换。或多或少像它是Android的主屏幕,上面有所有图标都可以拖动并放置到其他页面。我不确定是否必须使用任何种类的RecyclerView或手动处理每个视图,但仍不确定应如何完成?请检查下面的模型以获取参考。Home Screen Mockup

android gridview pagination homescreen resizable
1个回答
0
投票

为此,我将RecyclerViewGridLayoutManager结合使用,并通过GridLayoutManager.SpanSizeLookup设置像元大小。

通过这样做,您还可以使用RecyclerView附带的ItemTouchHelper来处理大多数拖放逻辑。

((您还应该提供您所做的任何尝试的代码)

编辑:行跨度

正如我所看到的,有三种方法可以解决行跨度问题

  1. 使用第三方库
  2. 编写您自己的LayoutManager
  3. 更改´onBindViewHolder`内项目的高度(这可能是我会做的)
// Some model class
data class Item(value: String, rowSpan: Int, columnSpan: Int)

// With this lookup to handle the columns
val spanSizeLookup: GridLayoutManager.SpanSizeLookup = 
    object : GridLayoutManager.SpanSizeLookup() {
        override fun getSpanSize(position: Int) = items[position].columnSpan
    }

// ...and this adapter that handles the height
class Adapter : RecyclerView.Adapter() {

    // ...

    fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val rows = items[position].rowSpan
        // Update height based on rows
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.