非法参数异常:最大高度(473)必须大于等于最小高度(747)。

3

我在尝试使用Jetpack Compose的示例,但出现了以下错误。自从这段代码之前运行良好以来,我没有做任何更改,唯一更改的是版本从dev15更改为alpha-01,然后就出现了此问题。

 java.lang.IllegalArgumentException: maxHeight(473) must be >= minHeight(747)
        at androidx.compose.ui.unit.Constraints.copy-msEJaDk(Constraints.kt:158)
        at androidx.compose.ui.unit.Constraints.copy-msEJaDk$default(Constraints.kt:146)
        at androidx.compose.ui.draw.PainterModifier.modifyConstraints-BRTryo0(PainterModifier.kt:224)
        at androidx.compose.ui.draw.PainterModifier.measure-3Jkh9V0(PainterModifier.kt:91)
        at androidx.compose.ui.node.ModifiedLayoutNode.performMeasure-BRTryo0(ModifiedLayoutNode.kt:36)
        at androidx.compose.ui.node.LayoutNodeWrapper.measure-BRTryo0(LayoutNodeWrapper.kt:120)
        at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.performMeasure-BRTryo0(DelegatingLayoutNodeWrapper.kt:106)
        at androidx.compose.ui.node.LayerWrapper.performMeasure-BRTryo0(LayerWrapper.kt:70)
        at androidx.compose.ui.node.LayoutNodeWrapper.measure-BRTryo0(LayoutNodeWrapper.kt:120)
        at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.performMeasure-BRTryo0(DelegatingLayoutNodeWrapper.kt:106)
        at androidx.compose.ui.node.LayerWrapper.performMeasure-BRTryo0(LayerWrapper.kt:70)
        at androidx.compose.ui.node.LayoutNodeWrapper.measure-BRTryo0(LayoutNodeWrapper.kt:120)
        at androidx.compose.foundation.layout.FillModifier.measure-3Jkh9V0(LayoutSize.kt:433)
        at androidx.compose.ui.node.ModifiedLayoutNode.performMeasure-BRTryo0(ModifiedLayoutNode.kt:36)
        at androidx.compose.ui.node.LayoutNodeWrapper.measure-BRTryo0(LayoutNodeWrapper.kt:120)
        at androidx.compose.foundation.layout.SizeModifier.measure-3Jkh9V0(LayoutSize.kt:507)
        at androidx.compose.ui.node.ModifiedLayoutNode.performMeasure-BRTryo0(ModifiedLayoutNode.kt:36)
        at androidx.compose.ui.node.LayoutNodeWrapper.measure-BRTryo0(LayoutNodeWrapper.kt:120)
        at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt:90)
        at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt)
        at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:132)
        at androidx.compose.ui.platform.AndroidComposeView.observeMeasureModelReads(AndroidComposeView.kt:425)
        at androidx.compose.ui.node.OuterMeasurablePlaceable.remeasure-BRTryo0(OuterMeasurablePlaceable.kt:89)
        at androidx.compose.ui.node.OuterMeasurablePlaceable.measure-BRTryo0(OuterMeasurablePlaceable.kt:62)
        at androidx.compose.ui.node.LayoutNode.measure-BRTryo0(LayoutNode.kt:1095)
        at androidx.compose.foundation.layout.RowColumnImplKt$rowColumnMeasureBlocks$1.invoke(RowColumnImpl.kt:90)
        at androidx.compose.foundation.layout.RowColumnImplKt$rowColumnMeasureBlocks$1.invoke(RowColumnImpl.kt)
        at androidx.compose.ui.LayoutKt$measureBlocksOf$1.measure-2MWCACw(Layout.kt:146)
        at androidx.compose.ui.node.InnerPlaceable.performMeasure-BRTryo0(InnerPlaceable.kt:48)
        at androidx.compose.ui.node.LayoutNodeWrapper.measure-BRTryo0(LayoutNodeWrapper.kt:120)
        at androidx.compose.foundation.layout.PaddingModifier.measure-3Jkh9V0(LayoutPadding.kt:169)
        at androidx.compose.ui.node.ModifiedLayoutNode.performMeasure-BRTryo0(ModifiedLayoutNode.kt:36)
        at androidx.compose.ui.node.LayoutNodeWrapper.measure-BRTryo0(LayoutNodeWrapper.kt:120)
        at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt:90)
        at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt)
        at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:132)
        at androidx.compose.ui.platform.AndroidComposeView.observeMeasureModelReads(AndroidComposeView.kt:425)
        at androidx.compose.ui.node.OuterMeasurablePlaceable.remeasure-BRTryo0(OuterMeasurablePlaceable.kt:89)
        at androidx.compose.ui.node.OuterMeasurablePlaceable.measure-BRTryo0(OuterMeasurablePlaceable.kt:62)
        at androidx.compose.ui.node.LayoutNode.measure-BRTryo0(LayoutNode.kt:1095)
        at androidx.compose.foundation.lazy.LazyForState.measure-mw7JCkE(LazyForState.kt:322)
        at androidx.compose.foundation.lazy.

我的代码如下

import android.os.Bundle
import androidx.annotation.DrawableRes
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.foundation.Image
import androidx.compose.foundation.Text
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumnFor
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.setContent
import androidx.compose.ui.res.imageResource
import androidx.compose.ui.unit.dp

import androidx.ui.tooling.preview.Preview
import com.example.jetexample.ui.typography

val recipeList = listOf<Recipe>(Recipe(R.drawable.header,"Test", listOf("Azucar","Tomate","lasagna")),
        Recipe(R.drawable.header,"Test", listOf("Azucar","Tomate","lasagna")),
        Recipe(R.drawable.header,"Test", listOf("Azucar","Tomate","lasagna")))


class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            RecipeList(recipeList)
        }
    }
}

@Composable
fun RecipeCard(recipe: Recipe) {
    val image = imageResource(R.drawable.header)
    Column(modifier = Modifier.padding(16.dp)) {
        val imageModifier = Modifier
                .preferredHeightIn(maxHeight = 180.dp)
                .fillMaxWidth()
                .clip(shape = RoundedCornerShape(8.dp))

        Image(image,modifier= imageModifier, contentScale = ContentScale.Crop)
        Spacer(Modifier.preferredHeight(16.dp))
        Text(recipe.title, style = typography.h6)
        for(ingredient in recipe.ingredients){
            Text(ingredient,style = typography.body2)
        }

    }
}

@Composable
fun RecipeList(recipeList:List<Recipe>){
    LazyColumnFor(recipeList) { item ->
        RecipeCard(recipe = item)
    }
}

@Preview(showBackground = true)
@Composable
fun RecipePreview(){
    RecipeList(recipeList)
}

data class Recipe(
        @DrawableRes val imageResource: Int,
        val title: String,
        val ingredients: List<String>
)

我认为问题可能出在导入的dp单位上,我真的不知道为什么会发生这种情况。


我碰到了类似的问题,但是我将固定的 dp 值作为 size 提供。所以将 size 修改为 requiredSize 修饰符解决了我的问题。 - Abir Hasan Shawon
1个回答

3

通过替换修复

        .preferredHeightIn(maxHeight = 180.dp)

使用

        .preferredHeightIn(180.dp)

谢谢,已经修复了。 - TeeTracker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接