Модификатор clip. Создание фрагмента компонента

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

Модификатор clip применяется для определения фрагмента компонента. Он имеет следующее определение:

fun Modifier.clip(shape: Shape): Modifier

В качестве параметра он принимает объект интерфейса Shape, который определяет вырезаемую форму.

Распространенным сценарием использования этого модификатора является создание фрагмента компонента на основе непрямоугольной формы, например, в виде овала или круга. Например, образуем из компонента Text округлую форму:

package com.example.helloapp

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Text
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.sp

import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp


class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            Text("Hello METANIT.COM!",
                fontSize = 28.sp,
                modifier = Modifier
                    .padding(10.dp)
                    .clip(shape= RoundedCornerShape(30.dp))
                    .background(Color.LightGray)
                    .padding(15.dp)
            )
        }
    }
}
Модификатор clip и обрезка компонентов в Jetpack Compose для Android на Kotlin

К фрагменту мы можем добавить границу:

Text("Hello METANIT.COM!",
        fontSize = 28.sp,
        modifier = Modifier
                .padding(10.dp)
                .clip(shape= RoundedCornerShape(30.dp))
                .border(width = 2.dp, color = Color.DarkGray, shape= RoundedCornerShape(30.dp))
                .background(Color.LightGray)
                .padding(15.dp)
)
Сочетание модификаторов clip и border и обрезка компонентов с созданием границы в Jetpack Compose для Android на Kotlin

Модификатор clip упрощает создание более сложных по композиции визуализаций компонентов. Например:

package com.example.helloapp

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Text
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.sp

import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.RectangleShape
import androidx.compose.ui.unit.dp


class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            Text("Hello METANIT.COM!",
                fontSize = 28.sp,
                modifier = Modifier
                    .padding(10.dp)     // отступ от границ контейнера
                    .background(Color.DarkGray)
                    .padding(25.dp)    // отступ от границ фрагмента
                    .clip(shape= RectangleShape)
                    .border(width = 2.dp, color = Color.White)
                    .background(Color.LightGray)
                    .padding(20.dp)     // отступ между границей во фрагменте и текстом
            )
        }
    }
}

Разберем использованные здесь модификаторы. Сначала устанавливаем отступ от границ контейнера:

.padding(10.dp)

Затем для всей области компонента Text устанавливается темно-серый цвет

.background(Color.DarkGray)

Далее внутри этой области устанавливаем отступ до границ фрагмента

.padding(25.dp)

Далее определяем прямоугольный фрагмент, для чего используем форму RectangleShape:

.clip(shape= RectangleShape)

Затем для фрагмента устанавливаем границу белого цвета:

.border(width = 2.dp, color = Color.White)

Фрагмент компонента Text закрашиваем в светло-серый цвет:

.background(Color.LightGray)

В конце устанавливаем отстут между содержимым компонента - собственно текстом и границей во фрагменте:

.padding(20.dp)
Модификатор clip и фрагментирование компонентов в Jetpack Compose для Android на Kotlin
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850