android - 修饰符取决于 Jetpack Compose 中其他修饰符的值吗?

标签 android android-jetpack-compose

如何创建依赖于其他修饰符值的新修饰符?举个例子,我想让子组件的高度是从父组件传入的高度的一半加上一些常量(因此无法使用 fillMaxHeight(fraction: Float))。

@Composable
fun View() {
   MyComposable(modifier = Modifier.size(40.dp))
}

@Composable
fun MyComposable(
  modifier: Modifier          // Assuming this modifier contains a size
) {
  Box(modifier) {             // Setting the the size from the passed in modifier
    val childHeightModifier = Modifier.height(???) // <-- Wanted to be some specific value depending on parent size
    
    Box(childHeightModifier) {
       ...
    }
  }
}

最佳答案

您可以将 BoxWithConstraints 用于此特定用例,它提供父级对其子级施加的约束:

@Composable
fun View() {
   MyComposable(modifier = Modifier.size(40.dp))
}

@Composable
fun MyComposable(modifier: Modifier) {
  BoxWithConstraints(modifier) { // this: BoxWithConstraintsScope
    val childHeightModifier = Modifier.height(maxHeight * 0.5f)
    Box(childHeightModifier) {
       ...
    }
  }
}

对于Modifier之间的通信,有一个ModifierLocal系统in the works ,这将允许做到这一点。

关于android - 修饰符取决于 Jetpack Compose 中其他修饰符的值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69294900/

相关文章:

java - 避免间接和冗余的方法调用

android - Jetpack compose Box 中的等宽和等高

android - 如何将 androidx.compose.ui.graphics.Color 转换为 android.graphics.Color (int)

android - Flow 不更新 Composable

android - AOSP android.content.res.Resources$NotFoundException : Resource ID #0x0

android - 添加 Firebase 子项时在 Android 中获取通知

android - 如何创建如下所示的自定义选项卡 View

android - 解析 Realm 中的 Integer 原始类型

android - 如何在 Jetpack Compose 中像下面的布局一样实现波纹或波浪或雷达加载

kotlin - 如何在 Jetpack Compose 中启动和停止动画