Parameter zum Auffüllen des Inhalts wird nicht verwendet

Lesezeit: 3 Minuten

Benutzeravatar von BenjyTec
BenjyTec

Ich arbeite seit kurzem mit Jetpack Compose. Ich habe folgendes Composable:

@Composable
fun SearchScreen(navController: NavHostController) {
    Scaffold(
        topBar = { SearchBar() },
        content = {
            Column(modifier = Modifier
                .fillMaxSize()
                .verticalScroll(rememberScrollState())) {
                Text(stringResource(id = R.string.genreFilter))
                Row(
                    modifier = Modifier
                        .horizontalScroll(rememberScrollState()),
                    horizontalArrangement = Arrangement.spacedBy(4.dp)
                ) {
                    // some nested Composables
                }

            }},
    )
}

Aber mit diesem Code, wie er ist, ist der gesamte Code darin enthalten content = {...} ist mit rotem Spruch unterstrichen Jetpack Compose: Content padding parameter it is not used. Ich habe in diesem Stackoverflow-Post bereits gelesen, dass eigentlich PaddingValues werden nur dann in einem Gerüst bereitgestellt, wenn die bottomBar gesetzt, was hier offensichtlich nicht der Fall ist. Daher verstehe ich nicht, warum ich diesen Fehler bekomme.

Hinweis: Die App verwendet tatsächlich a BottomNavigationaber nicht innerhalb der Composable die ich oben gezeigt habe. Kann es sein, dass das hier noch irgendwie propagiert wird?

  • Ich habe Ihr Composable kopiert und eingefügt und kann den unterstrichenen Fehler nicht reproduzieren. Ich habe auch die gesetzt content Argument als nachgestelltes Lambda und der Code funktioniert gut.

    – Tonnie

    2. Mai 2022 um 9:57 Uhr

  • Interessant. Könnte es mit meiner Compose-Version zusammenhängen? ich benutze compose_version = '1.2.0-alpha08, da ich den FilterChip Composable benötige. Welche Version verwendest du?

    – BenjyTec

    2. Mai 2022 um 10:01 Uhr


  • Ja, ich bin dabei composeVersion = "1.1.1" und ich habe gesehen @Pylyp Dukhov Antwort unten, die die Unterschiede verdeutlicht.

    – Tonnie

    2. Mai 2022 um 10:20 Uhr

Benutzeravatar von Phil Dukhov
Phil Duchov

Seit Compose 1.2.0 Es ist erforderlich, den Padding-Parameter zu verwenden, der übergeben wird Scaffold content zusammensetzbar. Sie sollten es auf den obersten Container/die oberste Ansicht anwenden content:

content = { padding ->
    Column(
        modifier = Modifier
            .padding(padding)
    // ...

Dies geschieht, um Layoutproblemen vorzubeugen, zum Beispiel wenn das Gerüst eine untere Stange hat, ohne die Verwendung dieser Polsterung wird ein Teil Ihrer Ansicht unter der Stange sein.

Du kannst es immer mit unterdrücken @SuppressLint("UnusedMaterialScaffoldPaddingParameter")aber ich würde empfehlen, dies nur zu tun, wenn Sie genau wissen, was Sie tun.

  • Danke, das erklärt es! Eine Anschlussfrage aber, wenn ich eine habe NavHost gesetzt als Kind von a Scaffoldwürde ich einfach die Polsterung direkt auf die setzen NavHostoder muss ich diese Polsterung irgendwie an die separaten Composables weitergeben, die innerhalb der angezeigt werden sollen NavHost?

    – BenjyTec

    2. Mai 2022 um 11:32 Uhr

  • @BenjyTec sollten Sie es in diesem Fall auf den obersten Container anwenden NavHost

    – Phil Dukhov

    2. Mai 2022 um 11:41 Uhr


  • Ich habe dies auf meinen obersten Container angewendet und erhalte immer noch den Fehler. Das Unterdrücken scheint die einzige Möglichkeit zu sein, ihn loszuwerden

    – alfietap

    6. Mai 2022 um 5:42 Uhr

  • @alfietap zeige den Code, wie du es gemacht hast, zB using Kern. Es sollte sicher funktionieren, wenn Ihr Code korrekt ist und es nicht funktioniert – es sollte als IDE-Fehler gemeldet werden

    – Phil Dukhov

    6. Mai 2022 um 5:46 Uhr

  • @alfietap es zeigt mir keinen Fehler. Stellen Sie sicher, dass Sie das neueste IDE- und Android-Gradle-Plugin verwenden. Versuchen Sie, ein neues Projekt mit demselben Code zu erstellen, um zu sehen, ob Sie es reproduzieren können. Falls ja, Prüfbericht einschließlich dieses Beispielprojekts, Ihrer IDE-Version und Ihres Beispielprojekts.

    – Phil Dukhov

    6. Mai 2022 um 6:03 Uhr

Ich habe einen Fehler in Version Alpha gesehen und habe SmallTopAppBar() verwendet. Scaffold hat keine Polsterung für zwei Composables bereitgestellt, die übereinander waren. Nach der Aktualisierung habe ich gerade festgestellt, dass der Fehler behoben ist, und Scaffold hat selbst eine Polsterung, sodass Composables nicht mehr übereinander liegen.

Verwendung:

  Scaffold(topBar = { AppBar() }) { paddingValues ->
  AnyComposable(modifier = Modifier.padding(paddingValues)){

  }

app build.gradle füge dies hinzu:

 buildFeatures {
    compose = true
    kotlinOptions.freeCompilerArgs += "-Xopt-in=androidx.compose.material.ExperimentalMaterialApi"
    kotlinOptions.freeCompilerArgs += "-Xopt-in=androidx.compose.foundation.ExperimentalFoundationApi"
    kotlinOptions.freeCompilerArgs += "-Xopt-in=androidx.compose.ui.ExperimentalComposeUiApi"
    kotlinOptions.freeCompilerArgs += "-Xopt-in=androidx.compose.animation.ExperimentalAnimationApi"
    kotlinOptions.freeCompilerArgs += "-Xopt-in=androidx.compose.animation.graphics.ExperimentalAnimationGraphicsApi"
    kotlinOptions.freeCompilerArgs += "-Xopt-in=kotlinx.serialization.ExperimentalSerializationApi"
    kotlinOptions.freeCompilerArgs += "-Xopt-in=com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi"
}

1438950cookie-checkParameter zum Auffüllen des Inhalts wird nicht verwendet

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy