#android #android-layout #android-jetpack-compose #android-dialog #spacing
Вопрос:
В простом AlertDialog
виде, как показано ниже
AlertDialog(
modifier = Modifier,
title = {
Text(text = "Title")
},
text = {
Column(
modifier = Modifier.fillMaxWidth()
) {
TextButton() {
Text("Text 1")
}
TextButton() {
Text("Text 2")
}
}
},
confirmButton = {},
dismissButton = {}
)
как я могу установить интервал между заголовком и первым TextButton
?
Я попытался установить a .padding(top = X.dp)
в столбце или в первой текстовой кнопке, но, похоже, это создает только пробел в нижней части AlertDialog
.
Также установка обычая .height(X.dp)
не сработала.
Я использую Compose 1.0.3
Ответ №1:
Как @Abhimanyu прекрасно объясняет, почему это не работает прямо сейчас, вот обходной путь, который я использую для достижения желаемого заполнения: добавление заголовка в содержимое. AlertDialog
title
параметр ‘s необязателен, поэтому его можно опустить/установить в null
значение , а вместо этого в параметр можно вставить фактический заголовок text
(который содержит содержимое диалогового окна).
@Composable
fun MyComposable() {
AlertDialog(
title = null,
text = {
Column {
Text(
modifier = Modifier.padding(vertical = 16.dp),
text = "Actual title"
)
// Rest of the dialog content
}
}
)
}
Ответ №2:
Это НЕ ответ. В нем содержится только информация о том, почему это невозможно.
На данный момент (6 октября 2021 года) это требование кажется невыполнимым с текущей версией compose (1.0.3).
Обновим это, как только это станет возможным.
AlertDialog
Код не учитывает указанные значения заполнения.
AlertDialog.kt
// Baseline distance from the first line of the text to the last line of the title
private val TextBaselineDistanceFromTitle = 36.sp
Смещение текста, используемое для позиционирования, рассчитывается следующим образом.
val textOffset = if (titlePlaceable == null) {
TextBaselineDistanceFromTop.roundToPx()
} else {
TextBaselineDistanceFromTitle.roundToPx()
}
Расстояние между первым текстом в составляемом тексте и последним текстом в составляемом заголовке всегда 36.sp
равно .
Код диалогового окна предупреждения в compose в настоящее время кажется слишком хакерским, и я мог видеть несколько задач в коде.
Надеюсь, код скоро будет изменен для обработки большего количества сценариев.
Ответ №3:
Я использую этот составляемый как первый ребенок внутри Column
@Composable
fun HackySpacer(space: Dp) {
Box(
modifier = Modifier
.height(space)
.fillMaxWidth()
) {
Text(text = "")
}
}
Это не идеально, но это работает для моего использования.
Ответ №4:
Теперь это возможно с помощью нового AlertDialog из Compose Material 3. Интервал по умолчанию между title
и text
гораздо более разумный, и его также можно добавить Modifier.padding()
или Spacer()
к обоим.
implementation("androidx.compose.material3:material3:1.0.0-alpha01")
androidx.compose.material3.AlertDialog(
onDismissRequest = {
openDialog.value = false
},
title = {
Text(text = "Title", modifier = Modifier.padding(50.dp))
},
text = {
Spacer(Modifier.height(50.dp))
Text(text = "Turned on by default")
},
confirmButton = {
TextButton(
onClick = {
openDialog.value = false
}
) {
Text("Confirm")
}
},
dismissButton = {
TextButton(
onClick = {
openDialog.value = false
}
) {
Text("Dismiss")
}
}
)