Функция SnackbarHost
Функция SnackbarHost рисует
текущее сообщение из очереди
SnackbarHostState.
Состояние передают в параметр hostState.
Хост обычно ставят в лямбду
snackbarHost у
Scaffold,
а текст добавляют вызовом
showSnackbar
из корутины.
Синтаксис
SnackbarHost(hostState = snackbarHostState)
Параметры
| Параметр | Описание |
|---|---|
hostState |
Очередь сообщений. Принимает объект класса
SnackbarHostState.
|
snackbar |
Лямбда, которая рисует одну полоску.
По умолчанию внутри вызывают
Snackbar.
|
Пример
Давайте покажем сообщение из Scaffold:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Button
import androidx.compose.material3.Scaffold
import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.Text
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import kotlinx.coroutines.launch
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val snackbarHostState = remember { SnackbarHostState() }
val scope = rememberCoroutineScope()
Scaffold(
snackbarHost = {
SnackbarHost(hostState = snackbarHostState)
},
) { padding ->
Button(
onClick = {
scope.launch {
snackbarHostState.showSnackbar("abcde")
}
},
modifier = Modifier.padding(padding),
) {
Text(text = "12345")
}
}
}
}
}
На экране по нажатию кнопки внизу
всплывёт полоска с текстом "abcde".
Пример
Давайте выведем второе сообщение подряд:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Button
import androidx.compose.material3.Scaffold
import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.Text
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import kotlinx.coroutines.launch
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val snackbarHostState = remember { SnackbarHostState() }
val scope = rememberCoroutineScope()
Scaffold(
snackbarHost = {
SnackbarHost(hostState = snackbarHostState)
},
) { padding ->
Button(
onClick = {
scope.launch {
snackbarHostState.showSnackbar("abcde")
snackbarHostState.showSnackbar("12345")
}
},
modifier = Modifier.padding(padding),
) {
Text(text = "abcde")
}
}
}
}
}
На экране сообщения покажутся по очереди, второе появится после скрытия первого.
Смотрите также
-
класс
SnackbarHostState,
который хранит очередь snackbar -
функция
Snackbar,
которой рисуют одну полоску -
функция
Scaffold,
куда вешают snackbarHost -
метод
showSnackbar,
который добавляет текст в очередь