/**
* 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.
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 ;
},
},
];