#android #android-jetpack-compose
Вопрос:
Я экспериментирую с выпадающим меню, и из документации следует, что оно должно вызывать onDismissRequest, когда я нажимаю снаружи:
onDismissRequest будет вызван, когда меню должно закрыться — например, когда есть кран за пределами меню или когда нажата клавиша «Назад».
Нажатие на кнопку «назад» может успешно закрыть меню.
Еще одна странная вещь заключается в том, что нажатие на раскрывающийся список не закрывает меню, поскольку оно также не может получать щелчки.
class MainActivity : ComponentActivity() { @ExperimentalMaterialApi override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { SampleScreen() } } } @Composable fun SampleScreen() { Scaffold(bottomBar = {MyBottomBar()}) { Text("hello world") } } @Composable private fun MyBottomBar() { var expanded by remember { mutableStateOf(false) } BottomAppBar { Box(modifier = Modifier.fillMaxWidth()) { Row(modifier = Modifier.align(Alignment.CenterEnd)) { Box { IconButton( onClick = {expanded = true} ) { Icon( Icons.Filled.MoreVert, contentDescription = "more" ) } DropdownMenu( expanded = expanded, onDismissRequest = { expanded = false } ) { DropdownMenuItem(onClick = { expanded = false }) { Text("item1") } DropdownMenuItem(onClick = { expanded = false }) { Text("item2") } } } } } } }
Экран:
Комментарии:
1. Когда я запускаю это локально, это работает нормально, в вашей среде должно быть что-то другое. Есть ли родительская композиция, которая могла бы перехватить этот жест?
2. Обновил код, чтобы показать, что других составных элементов нет. Кстати ,элементы также не получают кликов. Я запускаю его в API-интерфейсе эмулятора Pixel 3a 30 Android 11, а не на реальном устройстве.
3. Составьте версию 1.0.1
4. Я запустил ваш точный код на том же эмуляторе и той же версии композиции. Меню по-прежнему закрывается, когда я нажимаю снаружи
5. Спасибо за всю вашу помощь. Я попробовал это на реальном устройстве pixel 3, и оно работает. Затем я использую Pixel 5 AVD, и это тоже работает. Это означает, что он специфичен для моего AVD Pixel 3a…