/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @format */ 'use strict'; const React = require('react'); const ReactNative = require('react-native'); const { AccessibilityInfo, StyleSheet, Text, View, ToastAndroid, TouchableWithoutFeedback, } = ReactNative; const RNTesterBlock = require('./RNTesterBlock'); const RNTesterPage = require('./RNTesterPage'); const importantForAccessibilityValues = [ 'auto', 'yes', 'no', 'no-hide-descendants', ]; class AccessibilityAndroidExample extends React.Component { state = { count: 0, backgroundImportantForAcc: 0, forgroundImportantForAcc: 0, screenReaderEnabled: false, }; componentDidMount() { AccessibilityInfo.addEventListener( 'change', this._handleScreenReaderToggled, ); AccessibilityInfo.fetch().done(isEnabled => { this.setState({ screenReaderEnabled: isEnabled, }); }); } componentWillUnmount() { AccessibilityInfo.removeEventListener( 'change', this._handleScreenReaderToggled, ); } _handleScreenReaderToggled = isEnabled => { this.setState({ screenReaderEnabled: isEnabled, }); }; _addOne = () => { this.setState({ count: ++this.state.count, }); }; _changeBackgroundImportantForAcc = () => { this.setState({ backgroundImportantForAcc: (this.state.backgroundImportantForAcc + 1) % 4, }); }; _changeForgroundImportantForAcc = () => { this.setState({ forgroundImportantForAcc: (this.state.forgroundImportantForAcc + 1) % 4, }); }; render() { return ( This is nontouchable normal view. This is nontouchable accessible view without label. This is nontouchable accessible view with label. This is nontouchable accessible view with label. ToastAndroid.show('Toasts work by default', ToastAndroid.SHORT) } accessibilityRole="link"> Click me Or not ToastAndroid.show('Toasts work by default', ToastAndroid.SHORT) } accessibilityRole="button"> Click me Or not ToastAndroid.show('Toasts work by default', ToastAndroid.SHORT) } accessibilityRole="button" accessibilityStates={['disabled']} disabled={true}> I am disabled Clicking me will not trigger any action. ToastAndroid.show('Toasts work by default', ToastAndroid.SHORT) } accessibilityRole="button" accessibilityHint="Triggers Toasts"> Click Me! Accessible view with hint, role, and state Talkback will say: accessibility hint button, selected{' '} Accessible view with label, hint, role, and state Talkback will say: accessibility label, hint button, selected{' '} This accessible view has no label, so the text is read. Click me Clicked {this.state.count} times The screen reader is{' '} {this.state.screenReaderEnabled ? 'enabled' : 'disabled'}. Hello world Change importantForAccessibility for background layout. Background layout importantForAccessibility { importantForAccessibilityValues[ this.state.backgroundImportantForAcc ] } Change importantForAccessibility for forground layout. Forground layout importantForAccessibility { importantForAccessibilityValues[ this.state.forgroundImportantForAcc ] } ); } } const styles = StyleSheet.create({ embedded: { backgroundColor: 'yellow', padding: 10, }, container: { flex: 1, backgroundColor: 'white', padding: 10, height: 150, }, }); exports.title = 'Accessibility'; exports.description = 'Examples of using Accessibility API.'; exports.examples = [ { title: 'Accessibility elements', render(): React.Element { return ; }, }, ];