Введение:

В этом уроке мы рассмотрим, как реализовать нижний лист в Android Jetpack Compose с помощью Material-3. Нижний лист — это общий компонент пользовательского интерфейса, который может улучшить взаимодействие с пользователем, предоставляя дополнительный контент или параметры в приложении. Мы будем использовать библиотеку Material-3 для создания гладкого и современного дизайна нижнего листа.

Предпосылки:

Прежде чем мы начнем, убедитесь, что в файл build.gradle вашего проекта добавлена ​​следующая зависимость:

implementation 'androidx.compose.material3:material3:1.2.0-alpha02'

Выполнение:

Во-первых, давайте настроим класс MainActivity и необходимые зависимости:

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.*
import androidx.compose.material3.BottomSheetDefaults
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ModalBottomSheet
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContent {
            var showSheet by remember { mutableStateOf(false) }

            if (showSheet) {
                BottomSheet() {
                    showSheet = false
                }
            }

            JCBottomNavigationDemoTheme {
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    Column(
                        modifier = Modifier.fillMaxSize(),
                        verticalArrangement = Arrangement.Center,
                        horizontalAlignment = Alignment.CenterHorizontally
                    ) {
                        Button(onClick = {
                            showSheet = true
                        }) {
                            Text(text = "Show BottomSheet")
                        }
                    }
                }
            }
        }
    }
}

В приведенном выше коде мы определяем класс MainActivity и настраиваем базовую структуру нашего приложения. У нас есть переменная showSheet, которая отслеживает, должен ли отображаться нижний лист или нет. Когда пользователь нажимает кнопку «Показать нижний лист», для переменной showSheet устанавливается значение true, вызывая отображение нижнего листа.

Далее давайте создадим составную функцию BottomSheet:

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun BottomSheet(onDismiss: () -> Unit) {
    val modalBottomSheetState = rememberModalBottomSheetState()

    ModalBottomSheet(
        onDismissRequest = { onDismiss() },
        sheetState = modalBottomSheetState,
        dragHandle = { BottomSheetDefaults.DragHandle() },
    ) {
        CountryList()
    }
}

В функции BottomSheet мы определяем состояние нижнего листа с помощью rememberModalBottomSheetState(). Затем мы создаем компонент ModalBottomSheet, указав обратный вызов onDismissRequest при закрытии нижнего листа и dragHandle для легкого перетаскивания. Внутри нижнего листа мы вызываем функцию CountryList для отображения списка стран.

Наконец, давайте создадим компонуемую функцию CountryList, которая отображает список стран:

@Composable
fun CountryList() {
    val countries = listOf(
        Pair("United States", "\uD83C\uDDFA\uD83C\uDDF8"),
        Pair("Canada", "\uD83C\uDDE8\uD83C\uDDE6"),
        Pair("India", "\uD83C\uDDEE\uD83C\uDDF3"),
        Pair("Germany", "\uD83C\uDDE9\uD83C\uDDEA"),
        Pair("France", "\uD83C\uDDEB\uD83C\uDDF7"),
        Pair("Japan", "\uD83C\uDDEF\uD83C\uDDF5"),
        Pair("China", "\uD83C\uDDE8\uD83C\uDDF3"),
        Pair("Brazil", "\uD83C\uDDE7\uD83C\uDDF7"),
        Pair("Australia", "\uD83C\uDDE6\uD83C\uDDFA"),
        Pair("Russia", "\uD83C\uDDF7\uD83C\uDDFA"),
        Pair("United Kingdom", "\uD83C\uDDEC\uD83C\uDDE7"),
    )

    LazyColumn {
        items(countries) { (country, flag) ->
            Row(
                modifier = Modifier
                    .fillMaxWidth()
                    .padding(vertical = 10.dp, horizontal = 20.dp)
            ) {
                Text(
                    text = flag,
                    modifier = Modifier.padding(end = 20.dp)
                )
                Text(text = country)
            }
        }
    }
}

В функции CountryList мы определяем список стран вместе с соответствующими представлениями эмодзи флагов. Мы используем LazyColumn для отображения списка стран с возможностью прокрутки. Каждый элемент страны представлен Row, содержащим эмодзи флага и название страны.

Заключение:

В этом уроке мы узнали, как реализовать нижний лист в Android Jetpack Compose с помощью Material-3. Мы изучили необходимый код и зависимости, необходимые для создания нижнего листа, и в качестве примера отобразили список стран. Вы можете дополнительно настроить нижний лист и адаптировать его к требованиям вашего приложения. Jetpack Compose и Material-3 предоставляют мощные инструменты для создания современных и интерактивных компонентов пользовательского интерфейса, повышающих удобство работы пользователей в приложениях для Android.

Будьте в курсе последних публикаций: не пропустите!

Если вы нашли этот пост полезным, поддержите его, похлопав несколько раз 👏

Спасибо за вашу поддержку и высокую оценку! 😊🙏