我想在待办事项列表中创建一个文本字段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
例如,我在应用程序中有 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
如果将文本字段聚焦在屏幕底部附近,键盘会出现一会儿,然后立即隐藏。但是,如果您从上方聚焦某些 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
由于Jetpack Compose 1.0.0-alpha09 LazyColumn,LazyColumnForIndexed和行的同行已被弃用。如何LazyColumn使用,在哪里,为什么以及我应该如何使用rememberLazyListState?
如果您可以提供一个完整的示例,包括项目、状态和 onClick 侦听器,那将非常有帮助。
android android-jetpack-compose android-jetpack-compose-list
我有一个如下所示的 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
在右侧,我有一个可组合项中的项目列表,每个项目都位于一行内,所有项目都位于一列内
所有的子项都被剪裁以适应我不想要的屏幕,我希望这些项目即使在屏幕之外也能完全渲染,因为我在它们上面有一个可缩放的容器
正如您所看到的,文本字段中的文本如何垂直排列在一行而不是扩大宽度,这就是问题所在
代码 :
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)
简单节点列表是一列行,我左边一列,右边一列,如果左列的宽度增加,右行就会被屏幕剪掉
在 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
我将 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
我想使用 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
android-jetpack-compose-list ×10
android ×5
lazycolumn ×2
adview ×1
android-jetpack-compose-text ×1
gradle ×1
jitpack ×1