标签: android-jetpack-compose-list

Jetpack Compose - 在文本字段中捕获关键事件

我想在待办事项列表中创建一个文本字段when the user presses backspace on an empty text field , it removes itself,如您所见,非常简单!

如果按键事件是可编辑的,则 Jetpack Compose 和 Core Text Field 不会将其按键事件传播到父可组合项/修饰符 ~~ 在其代码中编写

所以我尝试了这个,但它没有按预期工作

Modifier.onKeyEvent {
     Log.d("BL_KeyEvent",it.type.toString())
     if (it.key.keyCode == Key.Backspace.keyCode) {
           if (item.text.isEmpty()) {
              onBackspaceRemove()
           }
       }
       false
     }
Run Code Online (Sandbox Code Playgroud)

我只是想知道如何实现它,因为 CoreTextField 是内部的,我无法捕获文本字段中的关键事件

android android-jetpack-compose android-jetpack-compose-list

10
推荐指数
1
解决办法
6216
查看次数

如何在 BottomSheetDialogFragment 中正确使用 Jetpack Compose?

例如,我在应用程序中有 MyBottomSheetDialogFragment 和 Compose LazyColumn 代码:

class MyBottomSheetDialogFragment : BottomSheetDialogFragment() {
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        return ComposeView(requireContext()).apply {
            setContent {
                Column(horizontalAlignment = Alignment.CenterHorizontally) {
                    Text("Header", color = Color.Black)
                    LazyColumn(
                        Modifier
                            .weight(1f)
                            .fillMaxWidth()) {
                        items(100) {
                            Text("Item $it", Modifier.fillMaxWidth(), Color.Black)
                        }
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并使用以下代码显示它:

MyBottomSheetDialogFragment().show(activity.supportFragmentManager, null)
Run Code Online (Sandbox Code Playgroud)

这就是我们所拥有的:

MyBottomSheetDialogFragment 屏幕图像.jpg

现在,如果向下滚动 LazyColumn 列表,则一切都会正常工作,但如果向上滚动 LazyColumn 列表,则底部工作表对话框将滚动,而不是 LazyColumn 列表。

如何在 BottomSheetDialogFragment 中正确实现 LazyColumn?

当我们使用 XML RecyclerView 列表时,要解决此问题,我们必须使用 NestedScrollView 包装 RecyclerView 列表,如此处所述 …

android-jetpack-compose android-bottomsheetdialog bottomsheetdialogfragment android-jetpack-compose-list lazycolumn

10
推荐指数
1
解决办法
4450
查看次数

如果 LazyColumn 内的 TextField 位于屏幕底部,则键盘不会打开

如果将文本字段聚焦在屏幕底部附近,键盘会出现一会儿,然后立即隐藏。但是,如果您从上方聚焦某些 TextField,键盘将照常打开,您可以滚动到底部。如果 windowSoftInputMode 设置为 adjustmentResize,则会发生这种情况。如果未设置,则行为将变为随机(键盘可能会重叠内容,也可能会推动工具栏等)。也许我只是做错了这一切,我不知道。我想知道以前是否有人遇到过这个问题并可以帮助我。

示例代码(为了简单起见,我在这里保留可变状态,不使用 ViewModel):

@Composable
fun Greeting() {
    Scaffold(topBar = {
        TopAppBar(title = { Text(text = "Some title") })
    }) {
        val focusManager = LocalFocusManager.current
        LazyColumn(
            contentPadding = PaddingValues(all = 16.dp),
            verticalArrangement = Arrangement.spacedBy(space = 16.dp)
        ) {
            items(count = 20) { index ->
                val (value, onValueChange) = rememberSaveable { mutableStateOf("Some value $index") }
                TextField(
                    value = value,
                    onValueChange = onValueChange,
                    modifier = Modifier.fillMaxWidth(),
                    label = { Text(text = "Some label $index") },
                    keyboardOptions = KeyboardOptions(imeAction = …
Run Code Online (Sandbox Code Playgroud)

android-jetpack-compose android-jetpack-compose-text android-jetpack-compose-list

9
推荐指数
0
解决办法
1565
查看次数

Jetpack Compose LazyColumn 对于已弃用,如何将 LazyColumn 与 listState 和对象列表一起使用?

由于Jetpack Compose 1.0.0-alpha09 LazyColumnLazyColumnForIndexed和行的同行已被弃用。如何LazyColumn使用,在哪里,为什么以及我应该如何使用rememberLazyListState

如果您可以提供一个完整的示例,包括项目、状态和 onClick 侦听器,那将非常有帮助。

android android-jetpack-compose android-jetpack-compose-list

8
推荐指数
1
解决办法
3203
查看次数

如何在 LazyColumn Jetpack Compose 中的项目之间添加分隔线?

我有一个如下所示的 LazyColumn:

LazyColumn (
    verticalArrangement = Arrangement.spacedBy(12.dp)
) {
    items(bookList) { book ->
        InProgressBookItem(book = book)
    }
}
Run Code Online (Sandbox Code Playgroud)

如何在列表中的每个项目之间添加一行,类似于在旧的 RecyclerView 上使用项目装饰?

android android-jetpack-compose android-jetpack-compose-list

8
推荐指数
2
解决办法
1308
查看次数

Jetpack Compose - 当宽度增加时行剪切子项

在右侧,我有一个可组合项中的项目列表,每个项目都位于一行内,所有项目都位于一列内

所有的子项都被剪裁以适应我不想要的屏幕,我希望这些项目即使在屏幕之外也能完全渲染,因为我在它们上面有一个可缩放的容器

正如您所看到的,文本字段中的文本如何垂直排列在一行而不是扩大宽度,这就是问题所在

在此输入图像描述

代码 :

Row(
        modifier = modifier.zIndex(3f),
        verticalAlignment = Alignment.CenterVertically,
        horizontalArrangement = Arrangement.Center,
    ) {
        SimpleNodesList(
            modifier = Modifier.padding(8.dp),
            parentNode = state.center,
            nodes = state.center.left,
            renderRight = false,
        )

        SimpleNode(node = state.center, parentNode = null)

        SimpleNodesList(
            modifier = Modifier.padding(8.dp),
            parentNode = state.center,
            nodes = state.center.right,
            renderLeft = false
        )
    }
Run Code Online (Sandbox Code Playgroud)

简单节点列表是一列行,我左边一列,右边一列,如果左列的宽度增加,右行就会被屏幕剪掉

android-jetpack-compose android-jetpack-compose-list

7
推荐指数
1
解决办法
1万
查看次数

Jetpack Compose LazyColumn 的 ItemDecoration 是什么?

在 JetpackCompose 中,我们可以使用LazyColumnForas RecyclerView

在 中RecyclerView,要在项目之间有适当的边距/填充,我们需要使用ItemDecoration,如本文所述

像下面

class MarginItemDecoration(private val spaceHeight: Int) : RecyclerView.ItemDecoration() {
    override fun getItemOffsets(outRect: Rect, view: View,
                                parent: RecyclerView, state: RecyclerView.State) {
        with(outRect) {
            if (parent.getChildAdapterPosition(view) == 0) {
                top = spaceHeight
            }
            left =  spaceHeight
            right = spaceHeight
            bottom = spaceHeight
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

对于 JetpackCompose LazyColumnFor,相当于ItemDecoration什么?

android android-recyclerview item-decoration android-jetpack-compose android-jetpack-compose-list

6
推荐指数
3
解决办法
1773
查看次数

有没有办法在 Jetpack Compose 中创建滚轮?

有没有办法创建看起来像 iOS 上的滚轮日期选择器的循环滚轮?

到处寻找答案但没有找到。

在此输入图像描述

android-jetpack android-jetpack-compose android-jetpack-compose-list

6
推荐指数
1
解决办法
2521
查看次数

AdManagerAdView 在 LazyColumn 中离开屏幕时不渲染广告图像

我将 AdManagerAdView 包装在 AndroidView 中,以便可以在 Jetpack Compose 中使用它。当我在 LazyColumn 中使用图像时,图像无法加载,并且 AdManagerAdView 尝试在可组合项出现在屏幕上之前加载图像。

如果我快速滚动到该元素,那么 LazyColumn 将其组合起来,并且在图像从广告服务器返回之前它就出现在屏幕上,它会按预期工作。

LazyColumn {
        items(5) {
            SomeOtherComposable(it)
        }

        item {
            AndroidView(
                modifier = Modifier
                    .width(300.dp)
                    .height(250.dp)
                    .background(Color.Green),
                factory = { context ->
                    val adView = AdManagerAdView(context)
                    adView.adSize = AdSize.MEDIUM_RECTANGLE
                    adView.adUnitId = adUnitId
                    adView.loadAd(Builder().build())
                    adView
                }
            )
        }

        items(5) {
            SomeOtherComposable(it)
        }
}
Run Code Online (Sandbox Code Playgroud)

出于演示目的...

@Composable
fun SomeOtherComposable(i: Int) {
    Text(
        text = "SomeOtherComposable $i",
        modifier = Modifier
            .fillMaxWidth()
            .height(320.dp)
            .background(Color.White)
    )
}
Run Code Online (Sandbox Code Playgroud)

如果在非延迟列或任何其他 Compose 布局中使用包装的 AdManagerAdView,这也可以正常工作。

This …

adview android-jetpack-compose android-jetpack-compose-list lazycolumn

6
推荐指数
1
解决办法
1140
查看次数

无法应用插件“com.android.internal.library”。Android Gradle 插件需要 Java 11 才能运行。您当前使用的是 Java 1.8

我想使用 Jetpack Compose 构建一个库并使用 jitpack.io 发布它。我使用的是 android studio 金丝雀版本 android studio 金丝雀版本。我已经构建了该项目,将其推送到 Github,发布了一个版本,然后将我的存储库的链接放在 jitpack.io 中以生成 lib 依赖项链接“implementation 'com.github.user:compose-lib:Tag' “但是出了点问题,我从 jitpack 收到了这个日志错误:

Build starting...
Start: Tue Apr 27 14:25:17 UTC 2021 0c5235afbe25
Git:
0.9.0-0-g13dbaf9
commit 13dbaf941d2c59d8e70ed64b868488abb7f3f2e1
Author: username 
Date:   Tue Apr 27 14:29:45 2021 +0200

    gradle plugin require Java 11 to run


Found Android manifest
Android SDK version: . Build tools: 30.0.3
Installing Build-tools 30.0.3 
Found gradle
Gradle build script
Found gradle version: 7.0.
Using gradle wrapper
Picked up JAVA_TOOL_OPTIONS: …
Run Code Online (Sandbox Code Playgroud)

android gradle android-library jitpack android-jetpack-compose-list

5
推荐指数
1
解决办法
2692
查看次数