标签: android-jetpack

Android Compose 中基于特定条件的链接修饰符

我想以这样的方式应用修饰符:如果提供了宽度,则应该使用提供的宽度,否则使用可用的最大宽度。

我按以下方式应用修改器,但结果不符合预期。视图宽度变得混乱。在此请求指导。

val myModifier = Modifier.padding(
    start = 4.dp, end = 4.dp, top = 8.dp, bottom = 8.dp
)

if (viewWidth == null)
    myModifier.then(Modifier.fillParentMaxWidth(1f))
else
    myModifier.then(Modifier.width(viewWidth))

myModifier.then(
    Modifier.height(viewHeight ?: 100.dp)
        .clickable(onClick = { listener.onItemClick(item) })
)
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack android-jetpack-compose

45
推荐指数
4
解决办法
2万
查看次数

如何仅在jetpack compose中添加底部边框

我想在布局底部添加边框。我知道我可以使用Divider可组合项,但我只想学习如何绘制边框

目前,我可以为所有边添加边框,但这不是我想要的。

Row(
    modifier = Modifier
        .border(border = BorderStroke(width = 1.dp, Color.LightGray))
) {
    TextField(value = "", onValueChange = {}, modifier = Modifier.weight(1f))
    Switch(checked = true, onCheckedChange = {})
    Icon(Icons.Filled.Close, "Remove", tint = Color.Gray)
}
Run Code Online (Sandbox Code Playgroud)

android android-jetpack android-jetpack-compose

43
推荐指数
2
解决办法
3万
查看次数

导航架构组件 - 对话框片段

是否可以使用带有DialogFragment的新导航架构组件?我是否必须创建自定义导航器?

我很乐意将它们与导航图中的新功能结合使用.

android android-architecture-components android-jetpack android-architecture-navigation

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

手动清除Android ViewModel?

参考android.arch.lifecycle.ViewModel课程.

ViewModel限定在与其相关的UI组件的生命周期中,因此在Fragment基于应用程序的应用程序中,这将是片段生命周期.这是一件好事.


在某些情况下,人们想要ViewModel在多个片段之间共享实例.具体而言,我对许多屏幕与相同基础数据相关的情况感兴趣.

(当多个相关片段显示在同一个屏幕上时,文档提出了相似的方法,但这可以通过使用单个宿主片段来解决,如下面的答案所示.)

这在官方ViewModel文档中讨论:

ViewModels还可以用作活动的不同片段之间的通信层.每个Fragment都可以通过其Activity使用相同的密钥获取ViewModel.这允许以解耦方式在片段之间进行通信,使得它们永远不需要直接与其他片段对话.

换句话说,要在表示不同屏幕的片段之间共享信息,ViewModel应将其范围限定为Activity生命周期(并且根据Android文档,这也可以在其他共享实例中使用).


现在,在新的Jetpack导航模式中,建议使用"One Activity/Many Fragments"架构.这意味着活动在应用程序使用的整个过程中都存在.

即任何ViewModel作用于Activity生命周期的共享实例永远不会被清除 - 内存仍然在不断使用.

为了保留内存并在任何时间点使用尽可能少的内容,能够ViewModel在不再需要时清除共享实例会很好.


如何ViewModel从它ViewModelStore或持有者片段手动清除?

android android-viewmodel android-architecture-components android-jetpack

36
推荐指数
5
解决办法
7780
查看次数

如何在android jetpack compose Row中自定义左/右对齐项目

我想要 Jetpack Compose 中的一行,如下所示:

----------------------------------------------------
| A |   B   |                                  | C |
----------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

我希望 A 和 B 左对齐,彼此相邻,C 在最后。不知道现有的横向排列是否有办法做到这一点。我还认为,嵌套行可能不是一个好主意。实现这一目标的最佳方法是什么?

android android-jetpack material-components-android android-jetpack-compose

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

Kotlin 1.6、Jetpack Compose 1.1.0 编译错误

我已将项目更新为 Kotlin 1.6.10、Compose 1.1.0-rc01,并将 compose 编译器更新为 1.1.0-rc02,因为我需要 Compose 中的一些新功能。

在编译过程中我现在遇到这个错误,有什么解决方案吗?它与 Kotlin 1.5.31、Compose/Compose 编译器 1.0.5 一起使用

java.lang.IllegalStateException: Symbol for kotlin.collections/mutableMapOf|-4813910536206556932[0] is unbound
at org.jetbrains.kotlin.ir.symbols.impl.IrBindablePublicSymbolBase.getOwner(IrPublicSymbolBase.kt:52)
at org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionPublicSymbolImpl.getOwner(IrPublicSymbolBase.kt:74)
at androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer.visitCall(LiveLiteralTransformer.kt:663)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitCall(IrElementTransformerVoid.kt:199)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitCall(IrElementTransformerVoid.kt:24)
at org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl.accept(IrCallImpl.kt:47)
at org.jetbrains.kotlin.ir.expressions.IrExpression.transform(IrExpression.kt:33)
at org.jetbrains.kotlin.ir.expressions.IrExpressionBody.transformChildren(IrBody.kt:46)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitBody(IrElementTransformerVoid.kt:108)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitExpressionBody(IrElementTransformerVoid.kt:114)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitExpressionBody(IrElementTransformerVoid.kt:115)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitExpressionBody(IrElementTransformerVoid.kt:24)
at org.jetbrains.kotlin.ir.expressions.IrExpressionBody.accept(IrBody.kt:36)
at org.jetbrains.kotlin.ir.expressions.IrExpressionBody.transform(IrBody.kt:39)
at org.jetbrains.kotlin.ir.declarations.IrField.transformChildren(IrField.kt:41)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitDeclaration(IrElementTransformerVoid.kt:57)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitField(IrElementTransformerVoid.kt:81)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitField(IrElementTransformerVoid.kt:82)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitField(IrElementTransformerVoid.kt:24)
at org.jetbrains.kotlin.ir.declarations.IrField.accept(IrField.kt:34)
at org.jetbrains.kotlin.ir.IrElement$DefaultImpls.transform(IrElement.kt:32)
at org.jetbrains.kotlin.ir.IrElementBase.transform(IrElementBase.kt:19)
at org.jetbrains.kotlin.ir.util.TransformKt.transformInPlace(transform.kt:35)
at org.jetbrains.kotlin.ir.declarations.IrClass.transformChildren(IrClass.kt:66)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitDeclaration(IrElementTransformerVoid.kt:57)
at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitClass(IrElementTransformerVoid.kt:66)
at androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer.access$visitClass$s780614737(LiveLiteralTransformer.kt:158)
at androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer$visitClass$1.invoke(LiveLiteralTransformer.kt:466)
at androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer$visitClass$1.invoke(LiveLiteralTransformer.kt:465)
at …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack android-jetpack-compose

34
推荐指数
2
解决办法
8521
查看次数

处理Android导航组件中的后退按钮

我想知道如何使用导航控制器正确处理系统后退按钮操作.在我的应用程序中,我有两个片段(例如片段1和片段2),我在fragment1中有一个目标为fragment2的动作.一切都很好,除了一件事 - 当用户按下fragment2中的系统后退按钮时,我想显示一个对话框(例如使用DialogFragment)来确认退出.实现此行为的最佳方法是什么?如果我app:defaultNavHost="true"在我的主机片段中使用它会自动返回忽略我的规则.此外,这个组件是什么?

在此输入图像描述

我应该使用"pop to"吗?

navigation android fragment android-jetpack

33
推荐指数
11
解决办法
3万
查看次数

androidx.legacy:legacy-support-v4: 依赖有什么用

我正在实施 Android Room 数据库,在其中一个教程中我发现了androidx.legacy:legacy-support-v4:1.0.0依赖项的用法。任何人都可以告诉我如何使用这种依赖项。

android android-room android-jetpack androidx

33
推荐指数
2
解决办法
2万
查看次数

如何更改 Android Jetpack Compose 中子布局的绘制顺序?

默认情况下,在 Jetpack Compose 中,布局子级渲染顺序与代码中子级的顺序匹配。在以下示例中,船(文本)将绘制在水面(方框)上。

\n
@Composable\nfun DrawingOrderExample(submarineMode: Boolean) {\n    Box(contentAlignment = Alignment.Center) {\n        Box(\n            modifier = Modifier\n                .size(32.dp)\n                .background(Color.Cyan.copy(alpha = .5f))\n        )\n\n        Text("\xe2\x9b\xb5")\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我可以根据论证强制把船拖到水下吗submarineMode

\n

android android-jetpack android-jetpack-compose

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

是否可以使用Android导航架构组件(Android Jetpack)有条件地设置startDestination?

我使用的导航Android的Jetpack的屏幕之间进行导航.现在我想动态设置startDestination.

我有一个名为MainActivity的Activity和两个Fragments,FragmentA和FragmentB.

var isAllSetUp : Boolean = // It is dynamic and I’m getting this from Preferences.

    If(isAllSetUp)
    {
     // show FragmentA
    }
    else
    {
     //show FragmentB
    }
Run Code Online (Sandbox Code Playgroud)

我想使用Navigation Architecture Component设置上面的流程.目前我使用startDestionation如下所示,但它不符合我的要求.

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:id="@+id/lrf_navigation"
   app:startDestination="@id/fragmentA">

   <fragment
       android:id="@+id/fragmentA"
       android:name="com.mindinventory.FragmentA"
       android:label="fragment_a"
       tools:layout="@layout/fragment_a" />
</navigation>
Run Code Online (Sandbox Code Playgroud)

是否可以使用Android导航架构组件有条件地设置startDestination?

android android-jetpack android-architecture-navigation

31
推荐指数
3
解决办法
9029
查看次数