This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.

ExposedDropdownMenuBox

一个 Jetpack Compose ExposedDropdownMenuBox 组件,用于显示带有可自定义锚点的下拉菜单。

Android
Included in Expo Go
Recommended version:
~57.0.3

信息 关于跨平台选择器,请参见 Picker — 在 Android 上基于 ExposedDropdownMenuBox 构建。

Expo UI ExposedDropdownMenuBox 与官方 Jetpack Compose ExposedDropdownMenuBox 相匹配。在锚点内容上使用 menuAnchor() 修饰符(通常是只读的 TextField),并使用 ExposedDropdownMenu 封装 DropdownMenuItem 子项。

🌐 Expo UI ExposedDropdownMenuBox matches the official Jetpack Compose ExposedDropdownMenuBox. Use the menuAnchor() modifier on the anchor content (typically a read-only TextField) and ExposedDropdownMenu to wrap DropdownMenuItem children.

Exposed dropdown menu showing four language options anchored to a text field

安装

🌐 Installation

Terminal
npx expo install @expo/ui

If you are installing this in an existing React Native app, make sure to install expo in your project.

用法

🌐 Usage

基础

🌐 Basic

该锚点是一个只读的 TextField,绑定到一个 useNativeState 可观察对象。在每个项目的 onClick 中更新该可观察对象以反映选定的值。

BasicExposedDropdownMenuBoxExample.tsx
import { DropdownMenuItem, ExposedDropdownMenuBox, ExposedDropdownMenu, Host, Text, TextField, useNativeState, } from '@expo/ui/jetpack-compose'; import { menuAnchor } from '@expo/ui/jetpack-compose/modifiers'; import { useState } from 'react'; const LANGUAGES = [ { label: 'Java', value: 'java' }, { label: 'JavaScript', value: 'js' }, { label: 'TypeScript', value: 'ts' }, ]; export default function BasicExposedDropdownMenuBoxExample() { const selectedLabel = useNativeState('Java'); const [expanded, setExpanded] = useState(false); return ( <Host matchContents> <ExposedDropdownMenuBox expanded={expanded} onExpandedChange={setExpanded}> <TextField value={selectedLabel} readOnly modifiers={[menuAnchor()]} /> <ExposedDropdownMenu expanded={expanded} onDismissRequest={() => setExpanded(false)}> {LANGUAGES.map(lang => ( <DropdownMenuItem key={lang.value} onClick={() => { selectedLabel.value = lang.label; setExpanded(false); }}> <DropdownMenuItem.Text> <Text>{lang.label}</Text> </DropdownMenuItem.Text> </DropdownMenuItem> ))} </ExposedDropdownMenu> </ExposedDropdownMenuBox> </Host> ); }

应用接口

🌐 API

import { ExposedDropdownMenuBox } from '@expo/ui/jetpack-compose';

Components

ExposedDropdownMenu

Type: React.Element<ExposedDropdownMenuProps>

A Material 3 ExposedDropdownMenu that displays menu items in a dropdown.

Must be used inside an ExposedDropdownMenuBox.

Props for the ExposedDropdownMenu component.

ExposedDropdownMenuProps

children

Optional • Type: ReactNode

Children should be DropdownMenuItem components.

containerColor

Optional • Type: ColorValue

Background color of the dropdown menu container.

expanded

Type: boolean

Whether the dropdown menu is expanded (visible).

modifiers

Optional • Type: ModifierConfig[]

Modifiers for the component.

onDismissRequest

Optional • Type: () => void

Callback fired when the menu requests to be dismissed (e.g. tapping outside, back button).

ExposedDropdownMenuBox

Type: React.Element<ExposedDropdownMenuBoxProps>

A Material 3 ExposedDropdownMenuBox.

Use the menuAnchor() modifier on the anchor content (e.g. a TextField or Text). Use ExposedDropdownMenu to wrap DropdownMenuItem children.

Example

<ExposedDropdownMenuBox expanded={expanded} onExpandedChange={setExpanded}> <TextField modifiers={[menuAnchor()]} defaultValue={value} readOnly /> <ExposedDropdownMenu expanded={expanded} onDismissRequest={() => setExpanded(false)}> <DropdownMenuItem onClick={() => { setSelected('a'); setExpanded(false); }}> <DropdownMenuItem.Text><Text>Option A</Text></DropdownMenuItem.Text> </DropdownMenuItem> </ExposedDropdownMenu> </ExposedDropdownMenuBox>

ExposedDropdownMenuBoxProps

children

Optional • Type: ReactNode

Children — should contain an anchor element with the menuAnchor() modifier and an ExposedDropdownMenu with DropdownMenuItem children.

expanded

Type: boolean

Whether the dropdown menu is expanded (visible).

modifiers

Optional • Type: ModifierConfig[]

Modifiers for the component.

onExpandedChange

Optional • Type: (expanded: boolean) => void

Callback when the expanded state changes (for example, tapping the field or dismissing the menu).