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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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