Освой Compose играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Compose: Конфигурация

Обновлено 17 апреля 2025

С помощью данных конфигурации можно многое узнать о текущем экране.

Ориентация

Свойство orientation возвращает целочисленное значение, которое соответствует предопределённым константам.


@Composable
fun Content() {
    val configuration = LocalConfiguration.current
    val orientation = configuration.orientation

    Box(
        Modifier
            .fillMaxSize()
            .wrapContentSize(Alignment.Center)
    ) {
        Text(
            text = "Экранная ориентация \n${getOrientation(orientation)}",
            fontSize = 35.sp,
            textAlign = TextAlign.Center
        )
    }
}

fun getOrientation(value: Int): String {
    return when (value) {
        ORIENTATION_UNDEFINED -> {
            "Не задана"
        }
        ORIENTATION_PORTRAIT -> {
            "Портретная"
        }
        ORIENTATION_LANDSCAPE -> {
            "Альбомная"
        }
        else -> {
            "Непонятно!"
        }
    }
}

Можно переписать пример, чтобы значение ориентации сохранить как состояние.


@Composable
fun Content() {
    val configuration = LocalConfiguration.current
    val orientation by remember {
        mutableStateOf(
            when (configuration.orientation) {
                Configuration.ORIENTATION_LANDSCAPE -> {
                    "Альбомная"
                }
                else -> {
                    "Портретная"
                }
            }
        )
    }

    Box(
        Modifier
            .fillMaxSize()
            .wrapContentSize(Alignment.Center)
    ) {
        Text(
            text = "Экранная ориентация\n$orientation",
            fontSize = 35.sp,
            textAlign = TextAlign.Center
        )
    }
}

Получить размеры экрана

Получим размеры экрана в dp или в Int, если убрать dp из кода.


val configuration = LocalConfiguration.current

val screenHeight = configuration.screenHeightDp.dp // в dp
val screenWidth = configuration.screenWidthDp // в Int

Языки

Узнаем об используемых языках. Доступно на устройствах Android 23+


@RequiresApi(Build.VERSION_CODES.N)
@Composable
fun Content() {
    val configuration = LocalConfiguration.current
    val locales: LocaleList = configuration.locales

    Column(Modifier.padding(8.dp)) {
        Text(
            text = "Display Language : ${locales.get(0).displayLanguage}",
        )
        Text(
            text = "Country : ${locales.get(0).country}",
        )
        Text(
            text = "Display Name : ${locales.get(0).displayName}",
        )
        Text(
            text = "Language : ${locales.get(0).language}",
        )
    }
}

Направление для макетов

Большинство котиков читают слева направо, но арабские коты читают справа налево. Узнать о направлении можно через конфигурацию.


@Composable
fun Content() {
    val configuration = LocalConfiguration.current
    val layoutDirection = configuration.layoutDirection

    Column(Modifier.padding(8.dp)) {
        Text(
            text = "Направлеине: ${getLayoutDirection(layoutDirection)}",
        )
    }
}

fun getLayoutDirection(value: Int): String {
    return when (value) {
        LAYOUT_DIRECTION_LTR -> { // 0
            "LTR : Left To Right"
        }
        LAYOUT_DIRECTION_RTL -> { // 1
            "RTL : Right To Left"
        }
        else -> {
            "Error!"
        }
    }
}

Дополнительное чтение

Реклама