SIGN IN SIGN UP
facebook / react-native UNCLAIMED

A framework for building native applications using React

0 0 0 C++

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