Android Compose, EsposedDropdownmenu не позиционирует должным образом при изменении позиции якоряAndroid

Форум для тех, кто программирует под Android
Anonymous
Android Compose, EsposedDropdownmenu не позиционирует должным образом при изменении позиции якоря

Сообщение Anonymous »

Я использую exposedDropdownmenubox в Android, чтобы отобразить параметры раскрытия. Мой макет включает в себя поле ввода, и когда пользователь пытается ввести данные, появляется клавиатура. Однако, когда пользователь пытается выбрать раскрывающуюся опцию, клавиатура увольняется, что приводит к переходу фокуса к раскрывающемуся спине. Проблема возникает при увольнении клавиатуры: позиция якоря сдвигается, но раскрывающийся список остается в исходном положении, что приводит к плохому пользовательскому опыту. < /P>

Код: Выделить всё

    @OptIn(ExperimentalMaterial3Api::class)
@Composable
fun  DropdownMenu(
label: String,
options: List,
resolveOption: (t: T) -> String,
selectedOption: T,
onOptionSelected: (t: T) -> Unit
) {
var expanded by remember { mutableStateOf(false) }
val focusRequester = remember { FocusRequester() }

ExposedDropdownMenuBox(expanded = expanded, onExpandedChange = { expanded = it }) {
OutlinedTextField(
value = resolveOption(selectedOption),
onValueChange = { },
label = { Text(label) },
readOnly = true,
trailingIcon = {
ExposedDropdownMenuDefaults.TrailingIcon(expanded = expanded)
},
modifier = Modifier
.menuAnchor()
.fillMaxWidth()
.clickable {
Log.d("Testing", "Dropdown clicked")
expanded = !expanded
}
.focusRequester(focusRequester)
)

ExposedDropdownMenu(
expanded = expanded,
onDismissRequest = { expanded = false }
) {
options.forEach { option ->
DropdownMenuItem(text = {
Text(text = resolveOption(option))
}, onClick = {
onOptionSelected(option)
expanded = false
})
}
}
}
}
@Composable
fun test() {
val debitOptions = listOf("Credit card", "Debit card", "Net Banking", "PhonePe", "Cash")

DropdownMenu(
label = "XXX",
options = debitOptions,
resolveOption = { it },
selectedOption = "",
onOptionSelected = {  }
)

val bank = listOf("Kotak", "HDFC", "SBI", "ICICI", "Cash")

DropdownMenu(
label = "XXX",
options = bank,
resolveOption = { it },
selectedOption = "",
onOptionSelected = {  }
)

DropdownMenu(
label = "XXX",
options = debitOptions,
resolveOption = { it },
selectedOption = "",
onOptionSelected = {  }
)

DropdownMenu(
label = "XXX",
options = bank,
resolveOption = { it },
selectedOption = "",
onOptionSelected = {  }
)

DropdownMenu(
label = "XXX",
options = debitOptions,
resolveOption = { it },
selectedOption = "",
onOptionSelected = {  }
)

DropdownMenu(
label = "XXX",
options = bank,
resolveOption = { it },
selectedOption = "",
onOptionSelected = {  }
)

OutlinedTextField(
value = "",
onValueChange = {},
label = { Text(text = "Amount") },
keyboardOptions = KeyboardOptions.Default.copy(
keyboardType = KeyboardType.Decimal // Allow decimal input
)
)
}
проблема

Подробнее здесь: https://stackoverflow.com/questions/795 ... the-anchor

Вернуться в «Android»