Wie erstelle ich eine benutzerdefinierte Snackbar mit fester Breite in Jetpack Compose?Android

Forum für diejenigen, die für Android programmieren
Anonymous
 Wie erstelle ich eine benutzerdefinierte Snackbar mit fester Breite in Jetpack Compose?

Post by Anonymous »

Ich versuche, eine benutzerdefinierte Snackbar in Jetpack Compose zu implementieren. Ich möchte, dass die Snackbar eine feste Breite hat (so etwas wie Wrapcontent), aber die Standard -Android -Snackbar erstreckt sich immer auf die Vollbildmodelle. Oder wäre es besser, meine eigene Snackbar mit Box, Karte oder einem anderen komponierbaren Snackbar zu implementieren? src = "https://i.sstatic.net/jybruykf.png"/>
TUSCH: Beispiel: < /p>

Code: Select all

import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.wrapContentWidth
import androidx.compose.material3.Button
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Snackbar
import androidx.compose.material3.SnackbarDuration
import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch

@Composable
fun LoadingSnackbarContent(message: String) {
Row(
modifier = Modifier
.padding(16.dp),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(16.dp)
) {
CircularProgressIndicator(
modifier = Modifier.size(24.dp),
color = Color.White,
strokeWidth = 2.dp
)
Text(
text = message,
color = Color.White,
)
}
}

@Composable
fun LoadingSnackbarDemo() {
val snackbarHostState = remember { SnackbarHostState() }
val coroutineScope = rememberCoroutineScope()
var isLoading by remember { mutableStateOf(false) }

Scaffold(
snackbarHost = {
SnackbarHost(snackbarHostState) { data ->
Snackbar(
modifier = Modifier
.padding(horizontal = 16.dp)
.wrapContentWidth(align = Alignment.CenterHorizontally),
content = { LoadingSnackbarContent(message = "Loading...") }
)
}
},
content = { paddingValues ->
Column(
modifier = Modifier
.fillMaxSize()
.padding(paddingValues)
.padding(16.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Button(
onClick = {
if (!isLoading) {
isLoading = true
coroutineScope.launch {
snackbarHostState.showSnackbar(
message = "Verifying...",
duration = SnackbarDuration.Indefinite
)
delay(3000)
snackbarHostState.currentSnackbarData?.dismiss()
isLoading = false
}
}
},
enabled = !isLoading
) {
Text(if (isLoading) "Loading..." else "Start Verification")
}
}
}
)
}

@Preview
@Composable
private fun LoadingSnackbarContentPreview() {
LoadingSnackbarContent("Loading...")
}

@Preview(showBackground = true)
@Composable
fun PreviewLoadingSnackbarDemo() {
LoadingSnackbarDemo()
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post