Surface

Последнее обновление: 03.04.2024

Компонент Surface является ключевым компонентом компоновки в Material Design, предоставляя для вложенного содердимого множество стилизаций по умолчанию. Он имеет несколько версий. Возьмем простейшую из них:

@Composable
@NonRestartableComposable
fun Surface(
    modifier: Modifier = Modifier,
    shape: Shape = RectangleShape,
    color: Color = MaterialTheme.colorScheme.surface,
    contentColor: Color = contentColorFor(color),
    tonalElevation: Dp = 0.dp,
    shadowElevation: Dp = 0.dp,
    border: BorderStroke? = null,
    content: @Composable () -> Unit
): Unit

Данная версия функции компонента принимает следующие параметры:

  • modifier: применяемые к контейнеру функции модификатора

  • shape: форма компонента в виде объекта Shape

  • color: фоновый цвет

  • contentColor: предпочитаемый цвет содержимого

  • tonalElevation: эффект анимации при нажатии

  • shadowElevation: высота тени

  • border: параметры границы в виде объекта BorderStroke

Например, простейший SUrface:

package com.example.helloapp

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.sp

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            Surface(
                Modifier.fillMaxSize(),
                contentColor = Color.LightGray,
                color = Color.DarkGray
            ){
                Text("Hello METANIT.COM", fontSize = 28.sp)
            }
        }
    }
}
Surface в Jetpack Compose и Kotlin на Android

В данном случае мы видим, что текст в качестве цвета использовал настройки Surface.

При этом Surface может одновременно содержать только один компонент, поэтому при использовании множества компонентов, их следует оборачивать в другой контейнер типа Box, Row или Column:

package com.example.helloapp

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.sp

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            val langs = listOf("Kotlin", "Java", "JavaScript", "Python")
            Surface(
                Modifier.fillMaxSize(),
                contentColor = Color.LightGray,
                color = Color.DarkGray
            ){
                Column {
                    Text("Языки программирования", fontSize = 28.sp)
                    for(lang in langs){
                        Text(lang, fontSize = 22.sp)
                    }
                }
            }
        }
    }
}
Surface и стилизация в Jetpack Compose и Kotlin на Android
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850