Я пытаюсь добавить ProgressIndicator к кнопке. Я бы хотел, чтобы индикатор выполнения занимал всю высоту кнопки с вертикальным заполнением 5.dp, где высота кнопки определяется содержимым.
Поэтому я добавил параметр isLoading: Boolean и на его основе обновляю contentPadding. Я решил оставить контент в композиции и просто установил для него .alpha(0f), чтобы размер кнопки остался прежним. Но я не могу добиться правильного размера индикатора прогресса. Если я добавлю к нему модификатор .matchParentHeight(), он наследует высоту самого содержимого (не заполняет всю высоту кнопки до заполнения) или просто переполняется за пределами кнопки . Альтернативно, если я удалю этот модификатор, индикатор увеличит высоту кнопки при нажатии.
Как это сделать?
@Composable
fun Button(
onClick: () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
isLoading: Boolean = false,
shape: Shape = ButtonDefaults.shape,
colors: ButtonColors = ButtonDefaults.buttonColors(),
elevation: ButtonElevation? = ButtonDefaults.buttonElevation(),
border: BorderStroke? = null,
contentPadding: PaddingValues = ButtonDefaults.ContentPadding,
interactionSource: MutableInteractionSource? = null,
content: @Composable BoxScope.() -> Unit,
) {
val layoutDirection = LocalLayoutDirection.current
androidx.compose.material3.Button(
onClick = onClick,
modifier = modifier
,enabled = enabled,
shape = shape,
colors = colors,
elevation = elevation,
border = border,
contentPadding = if(!isLoading) {
contentPadding
} else {
PaddingValues(
start = contentPadding.calculateStartPadding(layoutDirection),
end = contentPadding.calculateEndPadding(layoutDirection),
top = 5.dp,
bottom = 5.dp
)
},
interactionSource = interactionSource,
) {
Box(
contentAlignment = Alignment.Center,
) {
val contentAlpha = if (isLoading) { 0f } else { 1f }
Box(
modifier = Modifier
.alpha(contentAlpha)
) {
content()
}
if (isLoading) {
CircularProgressIndicator(
color = if (enabled) {
colors.contentColor
} else {
colors.disabledContentColor
},
modifier = Modifier
.matchParentSize()
.background(Color.Yellow)
)
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... in-jetpack
Как запретить дочернему элементу CircularProgressIndicator расширять родительский элемент в Jetpack Compose? ⇐ Android
Форум для тех, кто программирует под Android
1730419360
Anonymous
Я пытаюсь добавить ProgressIndicator к кнопке. Я бы хотел, чтобы индикатор выполнения занимал всю высоту кнопки с вертикальным заполнением 5.dp, где высота кнопки определяется содержимым.
Поэтому я добавил параметр isLoading: Boolean и на его основе обновляю contentPadding. Я решил оставить контент в композиции и просто установил для него .alpha(0f), чтобы размер кнопки остался прежним. Но я не могу добиться правильного размера индикатора прогресса. Если я добавлю к нему модификатор .matchParentHeight(), он наследует высоту самого содержимого (не заполняет всю высоту кнопки до заполнения) или просто переполняется за пределами кнопки . Альтернативно, если я удалю этот модификатор, индикатор увеличит высоту кнопки при нажатии.
Как это сделать?
@Composable
fun Button(
onClick: () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
isLoading: Boolean = false,
shape: Shape = ButtonDefaults.shape,
colors: ButtonColors = ButtonDefaults.buttonColors(),
elevation: ButtonElevation? = ButtonDefaults.buttonElevation(),
border: BorderStroke? = null,
contentPadding: PaddingValues = ButtonDefaults.ContentPadding,
interactionSource: MutableInteractionSource? = null,
content: @Composable BoxScope.() -> Unit,
) {
val layoutDirection = LocalLayoutDirection.current
androidx.compose.material3.Button(
onClick = onClick,
modifier = modifier
,enabled = enabled,
shape = shape,
colors = colors,
elevation = elevation,
border = border,
contentPadding = if(!isLoading) {
contentPadding
} else {
PaddingValues(
start = contentPadding.calculateStartPadding(layoutDirection),
end = contentPadding.calculateEndPadding(layoutDirection),
top = 5.dp,
bottom = 5.dp
)
},
interactionSource = interactionSource,
) {
Box(
contentAlignment = Alignment.Center,
) {
val contentAlpha = if (isLoading) { 0f } else { 1f }
Box(
modifier = Modifier
.alpha(contentAlpha)
) {
content()
}
if (isLoading) {
CircularProgressIndicator(
color = if (enabled) {
colors.contentColor
} else {
colors.disabledContentColor
},
modifier = Modifier
.matchParentSize()
.background(Color.Yellow)
)
}
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79145104/how-prevent-circularprogressindicator-child-from-expanding-the-parent-in-jetpack[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия