A framework for building native applications using React
Fix text clipping on Android 15+ due to useBoundsForWidth change (#54721)
Summary:
Android 15 (API 35) changed TextView's default behavior to use visual glyph bounds for width calculation (useBoundsForWidth=true). This causes text clipping for italic fonts and other typefaces where glyphs extend beyond their advance width:
https://developer.android.com/about/versions/15/behavior-changes-15
This PR uses a two-pass layout approach on Android 15+:
1. Create an unconstrained layout with setUseBoundsForWidth(true) to measure the actual visual bounds width
2. Create the final layout using the visual bounds width as layoutWidth
This ensures the container is sized correctly to accommodate the full visual extent of the text, preventing clipping while maintaining backwards compatibility with earlier Android versions.
Performance impact:
- On Android 14 and below: No change
- On Android 15+: Creates two StaticLayout instances instead of one for text with unconstrained or AT_MOST width. This overhead is mitigated by React Native's text measurement caching in the C++ layer, which avoids redundant measurements.
Text with EXACTLY width mode is unaffected as it only requires a single layout pass.
Closes https://github.com/facebook/react-native/issues/53286
Thanks a lot to intergalacticspacehighway for finding the root cause and creating a proof of concept fix.
## Changelog:
[ANDROID] [FIXED] - Fix text clipping on Android 15+ due to useBoundsForWidth change
Pull Request resolved: https://github.com/facebook/react-native/pull/54721
Test Plan:
Tested on RNTester + Android 16 on physical device:
| before | after |
| -- |
| {F1983971719} | {F1983971720} |
Also tested on the reproducer provided by https://github.com/facebook/react-native/issues/53286
| before | after |
| -- |
| {F1983971723} | {F1983971718} |
Reviewed By: javache
Differential Revision: D88001642
Pulled By: cortinico
fbshipit-source-id: 4bc20ef6da47bd4141f6b19fcc3e93ea7f0c343c C
Christian Falch committed
c931fa81e71524ec33b51267f0c9727c6cc2275e
Parent: f2fabd1
Committed by React Native Bot <[email protected]>
on 2/3/2026, 1:40:34 PM