Освой Compose играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Обновлено 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!"
}
}
}