Repository navigation
Android: a View with only aria-live / accessibilityLiveRegion is flattened, so the live region never announces #59329
Description
Description
On the New Architecture a View that has aria-live (or accessibilityLiveRegion) but no style is flattened away: it never reaches the native tree, so TalkBack never announces changes to its children. Adding collapsable={false} fixes it. Nothing in the docs says a live region needs it, and there is no warning.
ViewShadowNode::initialize keeps a view for accessibilityViewIsModal, accessibilityElementsHidden and importantForAccessibility, but not for accessibilityLiveRegion, so a live region container is treated as a layout-only view.
A related gap: Text does not map aria-live (it is not in the Text props docs either), while accessibilityLiveRegion on a Text works. Mapping aria-live in Text.js the same way as in View.js would make the two forms equivalent.
Steps to reproduce
- Turn on TalkBack (tested on a Samsung SM-A276B, Android 16, and an Android 17 emulator).
- Run the App below and wait: every 3 seconds one counter goes up, A, then B, then C. Nothing needs to be tapped.
- A is a
Viewwitharia-live="polite", B is the sameViewwithcollapsable={false}, C is aTextwithaccessibilityLiveRegion="polite". TalkBack announces B and C on every change and never announces A.
import { useEffect, useState } from 'react';
import { Text, View } from 'react-native';
export default function App() {
const [tick, setTick] = useState(0);
useEffect(() => {
const id = setInterval(() => setTick((value) => value + 1), 3000);
return () => clearInterval(id);
}, []);
// Counters take turns: A on ticks 1, 4, 7…, B on 2, 5, 8…, C on 3, 6, 9…
const count = (index: number) => Math.floor((tick + 2 - index) / 3);
return (
<View style={{ flex: 1, padding: 48, gap: 16 }}>
<Text>A: View with aria-live</Text>
<View aria-live="polite">
<Text>Cart A: {count(0)} items</Text>
</View>
<Text>B: the same View with collapsable false</Text>
<View aria-live="polite" collapsable={false}>
<Text>Cart B: {count(1)} items</Text>
</View>
<Text>C: Text with accessibilityLiveRegion</Text>
<Text accessibilityLiveRegion="polite">Cart C: {count(2)} items</Text>
</View>
);
}Expected: A, B and C are all announced.
Actual: A is silent.
React Native Version
0.88.0
Affected Platforms
Runtime - Android
Output of npx @react-native-community/cli info
System:
OS: macOS 27.0.1
CPU: (10) arm64 Apple M5
Memory: 141.05 MB / 16.00 GB
Shell:
version: "5.9"
path: /bin/zsh
Binaries:
Node:
version: 24.15.0
path: ~/.local/share/fnm/node-versions/v24.15.0/installation/bin/node
Yarn:
version: 1.22.22
path: ~/.local/share/fnm/node-versions/v24.15.0/installation/bin/yarn
npm:
version: 11.12.1
path: ~/.local/share/fnm/node-versions/v24.15.0/installation/bin/npm
Watchman:
version: 2026.07.20.00
path: /opt/homebrew/bin/watchman
Managers:
CocoaPods:
version: 1.17.0
path: /opt/homebrew/bin/pod
SDKs:
iOS SDK:
Platforms:
- DriverKit 27.0
- iOS 27.1
- macOS 27.0
- tvOS 27.0
- visionOS 27.0
- watchOS 27.0
Android SDK: Not Found
IDEs:
Android Studio: 2026.2 AI-262.9437.185.2621.16467767
Xcode:
version: 27.1/27A9275
path: /usr/bin/xcodebuild
Languages:
Java:
version: 17.0.20
path: /usr/bin/javac
Ruby:
version: 4.0.7
path: /opt/homebrew/bin/ruby
npmPackages:
"@react-native-community/cli":
installed: 20.2.0
wanted: 20.2.0
react:
installed: 19.3.0
wanted: 19.3.0
react-native:
installed: 0.88.0
wanted: 0.88.0
react-native-macos: Not Found
npmGlobalPackages:
"*react-native*": Not Found
Android:
hermesEnabled: true
newArchEnabled: true
iOS:
hermesEnabled: Not found
newArchEnabled: false
Stacktrace or Logs
No crash, error or warning. The app runs normally; TalkBack just does not announce changes to counter A. Logcat shows nothing related.
MANDATORY Reproducer
https://github.com/faciledictu/rn-live-region-repro
Screenshots and Videos
No response
Activity
faciledictu commentedon Oct 22, 2026
Fix: #59335
fix(Text): map aria-live to accessibilityLiveRegion (#59330)