当前位置: 首页 > 知识库问答 >
问题:

如何使用Jetpack Compose创建GridView

海新霁
2023-03-14

如何在Jetpack撰写中创建网格视图而不使用回收器视图或android.widget.gridview?

共有3个答案

田嘉慕
2023-03-14

正如@Pavel Marchenko所提到的,LazyVerticalGrid是从版本1.0.0-alpha09

这里有一个简单的例子:

    LazyVerticalGrid(
        cells = GridCells.Adaptive(96.dp),
        contentPadding = PaddingValues(16.dp),
    ) {
        items(bookList) { book ->
            Image(book.cover, modifier = Modifier.padding(8.dp))
        }
    }
单琛
2023-03-14

UPD:合成版本1.0.0-alpha09引入了标准组件:

懒散垂直网格

另一个基于LazyColumnFor的解决方案(Jetpack Compose版本1.0.0-alpha04)

@Composable
fun <T> LazyGridFor(
    items: List<T>,
    rowSize: Int = 1,
    itemContent: @Composable BoxScope.(T) -> Unit,
) {
    val rows = items.chunked(rowSize)
    LazyColumnFor(rows) { row ->
        Row(Modifier.fillParentMaxWidth()) {
            for ((index, item) in row.withIndex()) {
                Box(Modifier.fillMaxWidth(1f / (rowSize - index))) {
                    itemContent(item)
                }
            }
        }
    }
}
    
@Preview("LazyGridFor: example")
@Composable()
fun LazyGridForPreview() {
    val data = (1..100).map(Integer::toString)
    LazyGridFor(data, 3) { item ->
        Text(item)
    }
}
柴丰
2023-03-14

在< code>1.0.x中,< code>LazyVerticalGrid可组合组件为在网格中显示项目提供了实验性支持。

val numbers = (0..20).toList()

LazyVerticalGrid(
    cells = GridCells.Fixed(4)
) {
    items(numbers.size) {
        Column(horizontalAlignment = Alignment.CenterHorizontally) {
            Text(text = "Number")
            Text(text = "  $it",)
        }
    }
}

cell=GridCells.Fixed(4)表示有4列1/4的父宽。

val numbers = (0..20).toList()

LazyVerticalGrid(
    cells = GridCells.Adaptive(minSize = 64.dp)
) {
    items(numbers) {
        Column(horizontalAlignment = Alignment.CenterHorizontally) {
            Text(text = "Number")
            Text(text = "  $it",)
        }
    }
}

单元格=网格单元格。自适应(minSize=64.dp)意味着将有尽可能多的列,每列至少为64.dps,所有列的宽度将相等。

 类似资料:
  • 问题内容: 我是TestNG和Selenium Webdriver的新手,并尝试使用eclipse创建testng.xml。 在www上进行了一些研究,并了解可以通过右键单击Java类>> TestNG >>转换为TestNG来创建此文件。 但是,此转换重构向导未打开。 如果Java类已经包含@Test批注(!?),则此向导是否将无法打开 您能帮我使用eclipse创建testng.xml吗? (

  • 问题内容: 我是新手,似乎无法工作 可以在等程序中实现。当我尝试在程序中运行此语句时,出现了。 我在文档页面中检查了Derby Db Create Statements ,但是找不到这样的选择。 问题答案: 创建表,捕获并检查SQL状态代码。 完整的错误代码列表可以在这里 找到, 但我找不到 ;大概是 。 您需要的代码是。 只需运行一次代码并打印错误代码。不要忘记添加测试以确保代码有效。这样,您可

  • 问题内容: 我们计划将pdf生成实用程序从iText迁移到PDFBox(由于iText中的许可问题)。经过一些努力,我能够编写和定位文本,绘制线条等。但是创建带有嵌入在Table单元格中的文本的Tables是一个挑战,我遍历了文档,示例,Google,Stackoverflow找不到任何东西。想知道PDFBox是否提供本机支持来创建带有嵌入式文本的表格。我的最后一招是使用此链接https://gi

  • 问题内容: 我需要使用NDK以及JNI将一些功能实现到Android应用程序中。 这是我所写的C代码: 我的问题或多或少在代码内得到了解释。也许还可以:函数(jobject)的返回类型可以吗? 现在,NDKTest.java: 当我尝试运行代码时,它不起作用。 问题答案: 既然是内部类,那么获得它的方法就是 内部类的约定在权威规范中并未真正明确记录,但是根深蒂固地存在于如此多的工作代码中,因此不太

  • 问题内容: 我已经看过4个(是,四个)教程,但仍然不知道如何使它工作。 在我的Glassfish 4.1.1服务器中设置为HTTPS配置的第二个HTTP侦听器之后,我尝试创建证书,因此在浏览器中没有出现安全错误。问题是,我只是无法使keytool正常工作;无论我做什么,它都会弄乱并抛出奇怪的错误。例如,它找不到许多指南推荐的某些命令。 我可以猜测该工具在Java 8或其他版本中发生了变化,我真的不

  • 问题内容: 一般来说,我刚接触Java和Android编程,但是我想创建一个小型Java库,以便在普通(非Android)Java应用程序和Android应用程序之间共享一些代码;所以我的问题是用Eclipse创建普通Java库的最佳方法是什么? 我在任何地方都找不到从Eclipse创建新的Java库项目的选项。这是否意味着我必须使用普通的Java应用程序作为起点?因为这也将用于普通的Java应用