View
构建 UI 最基础的组件,View
是一个容器,支持使用 flexbox 进行布局、样式、一些触摸处理 和 可访问性 控制。View
直接映射到 React Native 运行所在平台的原生视图等效组件,无论是 UIView
、<div>
、android.view
等。
View
设计为嵌套在其他视图中,并且可以有 0 到多个任何类型的子组件。
此示例创建一个 View
,其中包含两个带有颜色的框和一个文本组件,以行排列并带有内边距。
View
旨在与StyleSheet
一起使用,以提高清晰度和性能,尽管也支持内联样式。
合成触摸事件
对于 View
响应器属性(例如,onResponderMove
),传递给它们的合成触摸事件的形式为 PressEvent。
参考
Props
accessibilityActions
辅助功能操作允许辅助技术以编程方式调用组件的操作。accessibilityActions
属性应包含操作对象列表。每个操作对象应包含字段名称和标签。
有关更多信息,请参阅 辅助功能指南。
类型 |
---|
array |
accessibilityElementsHidden
iOS
一个值,指示此辅助功能元素中包含的辅助功能元素是否隐藏。默认为 false
。
有关更多信息,请参阅 辅助功能指南。
类型 |
---|
bool |
accessibilityHint
辅助功能提示帮助用户了解当他们对辅助功能元素执行操作时会发生什么,尤其当结果从辅助功能标签中不清楚时。
类型 |
---|
string |
accessibilityLanguage
iOS
一个值,指示当用户与元素交互时,屏幕阅读器应使用哪种语言。它应遵循 BCP 47 规范。
有关更多信息,请参阅 iOS accessibilityLanguage
文档。
类型 |
---|
string |
accessibilityIgnoresInvertColors
iOS
一个值,指示当颜色反转打开时,此视图是否应该或不应该反转。值为 true
将告诉视图即使颜色反转打开也不要反转。
有关更多信息,请参阅 辅助功能指南。
类型 |
---|
bool |
accessibilityLabel
覆盖当用户与元素交互时屏幕阅读器读取的文本。默认情况下,标签是通过遍历所有子组件并累积所有由空格分隔的 Text
节点来构建的。
类型 |
---|
string |
accessibilityLiveRegion
Android
向辅助功能服务指示当此视图更改时是否应通知用户。仅适用于 Android API >= 19。可能的值
'none'
- 辅助功能服务不应宣告对此视图的更改。'polite'
- 辅助功能服务应宣告对此视图的更改。'assertive'
- 辅助功能服务应中断正在进行的语音以立即宣告对此视图的更改。
有关参考,请参阅 Android View
文档。
类型 |
---|
enum('none', 'polite', 'assertive') |
accessibilityRole
accessibilityRole
向辅助技术的用户传达组件的用途。
accessibilityRole
可以是以下之一
'none'
- 当元素没有角色时使用。'button'
- 当元素应被视为按钮时使用。'link'
- 当元素应被视为链接时使用。'search'
- 当文本字段元素也应被视为搜索字段时使用。'image'
- 当元素应被视为图像时使用。可以与按钮或链接组合使用,例如。'keyboardkey'
- 当元素充当键盘按键时使用。'text'
- 当元素应被视为无法更改的静态文本时使用。'adjustable'
- 当元素可以“调整”(例如滑块)时使用。'imagebutton'
- 当元素应被视为按钮并且也是图像时使用。'header'
- 当元素充当内容部分的标题(例如导航栏的标题)时使用。'summary'
- 当元素可用于在应用首次启动时提供应用中当前状况的快速摘要时使用。'alert'
- 当元素包含要呈现给用户的重要文本时使用。'checkbox'
- 当元素表示可以选中、取消选中或具有混合选中状态的复选框时使用。'combobox'
- 当元素表示组合框时使用,它允许用户在多个选项中进行选择。'menu'
- 当组件是选项菜单时使用。'menubar'
- 当组件是多个菜单的容器时使用。'menuitem'
- 用于表示菜单中的项。'progressbar'
- 用于表示指示任务进度的组件。'radio'
- 用于表示单选按钮。'radiogroup'
- 用于表示一组单选按钮。'scrollbar'
- 用于表示滚动条。'spinbutton'
- 用于表示打开选项列表的按钮。'switch'
- 用于表示可以打开和关闭的开关。'tab'
- 用于表示选项卡。'tablist'
- 用于表示选项卡列表。'timer'
- 用于表示计时器。'toolbar'
- 用于表示工具栏(操作按钮或组件的容器)。'grid'
- 与 ScrollView、VirtualizedList、FlatList 或 SectionList 一起使用以表示网格。将网格的进入/退出公告添加到 android GridView。
类型 |
---|
string |
accessibilityState
向辅助技术的用户描述组件的当前状态。
有关更多信息,请参阅 辅助功能指南。
类型 |
---|
object: {disabled: bool, selected: bool, checked: bool or 'mixed', busy: bool, expanded: bool} |
accessibilityValue
表示组件的当前值。它可以是组件值的文本描述,或者对于基于范围的组件(例如滑块和进度条),它包含范围信息(最小值、当前值和最大值)。
有关更多信息,请参阅 辅助功能指南。
类型 |
---|
object: {min: number, max: number, now: number, text: string} |
accessibilityViewIsModal
iOS
一个值,指示 VoiceOver 是否应忽略接收器的同级视图内的元素。默认为 false
。
有关更多信息,请参阅 辅助功能指南。
类型 |
---|
bool |
accessible
当为 true
时,表示该视图是辅助功能元素。默认情况下,所有可触摸元素都是可访问的。
aria-busy
指示元素正在被修改,辅助技术可能希望等到更改完成后再通知用户有关更新。
类型 | 默认值 |
---|---|
boolean | false |
aria-checked
指示可检查元素的状态。此字段可以采用布尔值或“mixed”字符串来表示混合复选框。
类型 | 默认值 |
---|---|
boolean, 'mixed' | false |
aria-disabled
指示元素是可感知的但已禁用,因此它不可编辑或以其他方式可操作。
类型 | 默认值 |
---|---|
boolean | false |
aria-expanded
指示可展开元素当前是展开还是折叠。
类型 | 默认值 |
---|---|
boolean | false |
aria-hidden
指示此辅助功能元素中包含的辅助功能元素是否隐藏。
例如,在一个包含同级视图 A
和 B
的窗口中,在视图 B
上将 aria-hidden
设置为 true
会导致 VoiceOver 忽略视图 B
中的元素。
类型 | 默认值 |
---|---|
boolean | false |
aria-label
定义一个字符串值,用于标记交互式元素。
类型 |
---|
string |
aria-labelledby
Android
标识标记应用它的元素的元素。aria-labelledby
的值应与 nativeID
相关元素的匹配
<View>
<Text nativeID="formLabel">Label for Input Field</Text>
<TextInput aria-label="input" aria-labelledby="formLabel" />
</View>
类型 |
---|
string |
aria-live
Android
指示元素将被更新,并描述用户代理、辅助技术和用户可以从实时区域期望的更新类型。
- off 辅助功能服务不应宣告对此视图的更改。
- polite 辅助功能服务应宣告对此视图的更改。
- assertive 辅助功能服务应中断正在进行的语音以立即宣告对此视图的更改。
类型 | 默认值 |
---|---|
enum('assertive' , 'off' , 'polite' ) | 'off' |
aria-modal
iOS
布尔值,指示 VoiceOver 是否应忽略接收器的同级视图内的元素。优先于 accessibilityViewIsModal
属性。
类型 | 默认值 |
---|---|
boolean | false |
aria-selected
指示可选择元素当前是否被选中。
类型 |
---|
boolean |
aria-valuemax
表示基于范围的组件(例如滑块和进度条)的最大值。优先于 accessibilityValue
属性中的 max
值。
类型 |
---|
number |
aria-valuemin
表示基于范围的组件(例如滑块和进度条)的最小值。优先于 accessibilityValue
属性中的 min
值。
类型 |
---|
number |
aria-valuenow
表示基于范围的组件(例如滑块和进度条)的当前值。优先于 accessibilityValue
属性中的 now
值。
类型 |
---|
number |
aria-valuetext
表示组件的文本描述。优先于 accessibilityValue
属性中的 text
值。
类型 |
---|
string |
collapsable
仅用于布局其子组件或以其他方式不绘制任何内容的视图可能会作为优化自动从原生层级结构中删除。将此属性设置为 false
以禁用此优化并确保此 View
存在于原生视图层级结构中。
类型 | 默认值 |
---|---|
boolean | true |
collapsableChildren
设置为 false 可防止视图的直接子组件从原生视图层级结构中删除,类似于在每个子组件上设置 collapsable={false}
的效果。
类型 | 默认值 |
---|---|
boolean | true |
focusable
Android
此 View
是否应该可以通过非触摸输入设备(例如,通过硬件键盘接收焦点)获得焦点。
类型 |
---|
boolean |
hitSlop
这定义了触摸事件可以从视图开始多远。典型的界面指南建议触摸目标至少为 30 - 40 点/密度无关像素。
例如,如果可触摸视图的高度为 20,则可触摸高度可以使用 hitSlop={{top: 10, bottom: 10, left: 0, right: 0}}
扩展到 40
触摸区域永远不会超出父视图边界,并且如果触摸击中两个重叠视图,则同级视图的 Z 索引始终优先。
类型 |
---|
object: {top: number, left: number, bottom: number, right: number} |
id
用于从原生类中定位此视图。优先于 nativeID
属性。
这将为此视图禁用“仅布局视图移除”优化!
类型 |
---|
string |
importantForAccessibility
Android
控制视图对于辅助功能的重要性,即它是否触发辅助功能事件以及是否报告给查询屏幕的辅助功能服务。仅适用于 Android。
可能的值
'auto'
- 系统确定视图对于辅助功能是否重要 - 默认值(推荐)。'yes'
- 该视图对于辅助功能很重要。'no'
- 该视图对于辅助功能不重要。'no-hide-descendants'
- 该视图对于辅助功能不重要,其任何后代视图也不重要。
有关参考,请参阅 Android importantForAccessibility
文档。
类型 |
---|
enum('auto', 'yes', 'no', 'no-hide-descendants') |
nativeID
用于从原生类中定位此视图。
这将为此视图禁用“仅布局视图移除”优化!
类型 |
---|
string |
needsOffscreenAlphaCompositing
此 View
是否需要离屏渲染并与 alpha 合成,以保持 100% 正确的颜色和混合行为。默认值 (false
) 回退到绘制组件及其子组件,并将 alpha 应用于用于绘制每个元素的画笔,而不是离屏渲染整个组件并将其与 alpha 值合成回来。如果您要设置不透明度的 View
具有多个重叠元素(例如,多个重叠的 View
或文本和背景),则此默认值可能会很明显且不受欢迎。
离屏渲染以保持正确的 alpha 行为非常昂贵,并且对于非原生开发人员来说难以调试,这就是为什么默认情况下不启用它。如果您确实需要为动画启用此属性,请考虑将其与 renderToHardwareTextureAndroid 结合使用,如果视图内容是静态的(即,不需要在每一帧都重新绘制)。如果启用该属性,则此 View 将离屏渲染一次,保存在硬件纹理中,然后在每一帧上使用 alpha 合成到屏幕上,而无需在 GPU 上切换渲染目标。
类型 |
---|
bool |
nextFocusDown
Android
指定当用户向下导航时接收焦点的下一个视图。请参阅 Android 文档。
类型 |
---|
number |
nextFocusForward
Android
指定当用户向前导航时接收焦点的下一个视图。请参阅 Android 文档。
类型 |
---|
number |
nextFocusLeft
Android
指定当用户向左导航时接收焦点的下一个视图。请参阅 Android 文档。
类型 |
---|
number |
nextFocusRight
Android
指定当用户向右导航时接收焦点的下一个视图。请参阅 Android 文档。
类型 |
---|
number |
nextFocusUp
Android
指定当用户向上导航时接收焦点的下一个视图。请参阅 Android 文档。
类型 |
---|
number |
onAccessibilityAction
当用户执行辅助功能操作时调用。此函数的唯一参数是一个事件,其中包含要执行的操作的名称。
有关更多信息,请参阅 辅助功能指南。
类型 |
---|
function |
onAccessibilityEscape
iOS
当 accessible
为 true
时,当用户执行 escape 手势时,系统将调用此函数。
类型 |
---|
function |
onAccessibilityTap
iOS
当 accessible
为 true 时,当用户执行辅助功能 tap 手势时,系统将尝试调用此函数。
类型 |
---|
function |
onLayout
在挂载和布局更改时调用。
此事件在布局计算完成后立即触发,但新的布局可能尚未反映在屏幕上接收到事件时,尤其是在布局动画正在进行中时。
类型 |
---|
({nativeEvent: LayoutEvent}) => void |
onMagicTap
iOS
当 accessible
为 true
时,当用户执行 magic tap 手势时,系统将调用此函数。
类型 |
---|
function |
onMoveShouldSetResponder
此视图是否要“声明”触摸响应?当 View
不是响应器时,为 View
上的每次触摸移动调用此函数。
类型 |
---|
({nativeEvent: PressEvent}) => boolean |
onMoveShouldSetResponderCapture
如果父 View
想要阻止子 View
在移动时成为响应器,则它应该具有此处理程序,该处理程序返回 true
。
类型 |
---|
({nativeEvent: PressEvent}) => boolean |
onResponderGrant
View 现在正在响应触摸事件。现在是突出显示并向用户展示正在发生的事情的时候了。
在 Android 上,从此回调返回 true 以防止任何其他原生组件成为响应器,直到此响应器终止。
类型 |
---|
({nativeEvent: PressEvent}) => void | boolean |
onResponderMove
用户正在移动手指。
类型 |
---|
({nativeEvent: PressEvent}) => void |
onResponderReject
另一个响应器已处于活动状态,并且不会将其释放给请求成为响应器的 View
。
类型 |
---|
({nativeEvent: PressEvent}) => void |
onResponderRelease
在触摸结束时触发。
类型 |
---|
({nativeEvent: PressEvent}) => void |
onResponderTerminate
响应器已从 View
中移除。可能会在调用 onResponderTerminationRequest
后被其他视图移除,或者可能会在未询问的情况下被操作系统移除(例如,在 iOS 上使用控制中心/通知中心时会发生这种情况)
类型 |
---|
({nativeEvent: PressEvent}) => void |
onResponderTerminationRequest
一些其他 View
想要成为响应器,并请求此 View
释放其响应器。返回 true
允许其释放。
类型 |
---|
({nativeEvent: PressEvent}) => void |
onStartShouldSetResponder
此视图是否要在触摸开始时成为响应器?
类型 |
---|
({nativeEvent: PressEvent}) => boolean |
onStartShouldSetResponderCapture
如果父 View
想要阻止子 View
在触摸开始时成为响应器,则它应该具有此处理程序,该处理程序返回 true
。
类型 |
---|
({nativeEvent: PressEvent}) => boolean |
pointerEvents
控制 View
是否可以成为触摸事件的目标。
'auto'
: View 可以是触摸事件的目标。'none'
: View 永远不是触摸事件的目标。'box-none'
: View 永远不是触摸事件的目标,但其子视图可以是。它的行为就像视图在 CSS 中具有以下类一样
.box-none {
pointer-events: none;
}
.box-none * {
pointer-events: auto;
}
'box-only'
: 视图可以是触摸事件的目标,但其子视图不能是。它的行为就像视图在 CSS 中具有以下类一样
.box-only {
pointer-events: auto;
}
.box-only * {
pointer-events: none;
}
类型 |
---|
enum('box-none', 'none', 'box-only', 'auto') |
removeClippedSubviews
这是 RCTView
公开的保留性能属性,当有许多子视图(其中大多数在屏幕外)时,它对于滚动内容很有用。为了使此属性有效,它必须应用于包含许多超出其边界的子视图的视图。子视图还必须具有 overflow: hidden
,包含视图(或其父视图之一)也应如此。
类型 |
---|
bool |
renderToHardwareTextureAndroid
Android
此 View
是否应将其自身(及其所有子组件)渲染到 GPU 上的单个硬件纹理中。
在 Android 上,这对于仅修改不透明度、旋转、平移和/或缩放的动画和交互很有用:在这些情况下,视图不必重新绘制,并且无需重新执行显示列表。纹理可以重复使用并以不同的参数重新合成。缺点是这可能会占用有限的视频内存,因此应在交互/动画结束时将此属性设置回 false。
类型 |
---|
bool |
role
role
向辅助技术的用户传达组件的用途。优先于 accessibilityRole
属性。
类型 |
---|
Role |
shouldRasterizeIOS
iOS
此 View
是否应在合成之前渲染为位图。
在 iOS 上,这对于不修改此组件的尺寸及其子组件的动画和交互很有用;例如,当平移静态视图的位置时,光栅化允许渲染器重用静态视图的缓存位图并在每一帧期间快速合成它。
光栅化会导致屏幕外绘制过程,并且位图会消耗内存。使用此属性时请进行测试和测量。
类型 |
---|
bool |
style
类型 |
---|
View 样式 |
tabIndex
Android
此 View
是否应该可以通过非触摸输入设备(例如,通过硬件键盘接收焦点)获得焦点。支持以下值
0
- 视图可聚焦-1
- 视图不可聚焦
类型 |
---|
enum(0, -1) |
testID
用于在端到端测试中定位此视图。
这将为此视图禁用“仅布局视图移除”优化!
类型 |
---|
string |