#4217·tamagui

[Button][Android] disabled false -> true -> false leaves only the text region pressable

Author: boiboifCreated Sep 16, 2026Updated Sep 16, 2026

Current Behavior

On Android with React Native's New Architecture, a Tamagui Button does not fully recover after disabled changes false -> true -> false. Once re-enabled, presses on the button's padding are ignored, while presses directly on the child text still invoke onPress.

The React state and UI both show disabled=false, but Android UI Automator still reports the outer Tamagui button as enabled=false. A same-sized React Native Pressable driven by the same state recovers normally.

Expected Behavior

After disabled returns to false, the complete visual bounds of the Button should invoke onPress again and native accessibility semantics should report enabled=true.

Tamagui Version

markdown
2.7.7

Platform (Web, iOS, Android)

markdown
Android 13 / API 33, physical arm64 device
React Native 0.86.3, New Architecture / Fabric
Expo SDK 57.0.23 release build

Reproduction

markdown
Repository: https://github.com/boiboif/tamagui-disabled-button-hitbox-repro

1. `npm install`
2. `npx expo run:android`
3. With `disabled=false`, tap the left padding inside the 320 x 64 Tamagui Button. The count increases.
4. Toggle `disabled` to `true`, then back to `false`.
5. Tap the same padding. The count does not increase.
6. Tap the Button text. The count increases.

The app also includes a same-sized React Native Pressable control.

The relevant component is intentionally plain and has no custom disabledStyle:

typescript
<Button
  testID="tamagui-target"
  disabled={disabled}
  height={64}
  width={320}
  onPress={() => setPresses((count) => count + 1)}
>
  Target button
</Button>

Physical-device ADB verification:

Step Result
Initial disabled=false Native node enabled=true; padding tap changes count 0 -> 1
After false -> true -> false UI says false, but native node remains enabled=false
Same padding tap Count remains 1
Text-region tap Count changes 1 -> 2
RN Pressable after the same cycle Native node enabled=true; padding tap changes count 0 -> 1

The Tamagui frame remains [501,683][1419,867], and the text occupies [837,746][1082,802], matching the observed text-only press region.

Initial state

After disabled cycle

Possible lead: the Button disabled variant sets pointerEvents: 'none' and aria-disabled: true for the true branch, but has no explicit values for the false branch. On this Fabric setup, both native values appear to remain after the prop returns to false.

System Info

markdown
System:
  OS: Windows 11 10.0.26200
  CPU: (16) x64 Intel(R) Core(TM) Ultra 7 255H
  Memory: 4.02 GB / 31.49 GB
Binaries:
  Node: 24.18.0
  npm: 11.16.0
npmPackages:
  @tamagui/button: 2.7.7
  @tamagui/config-default: 2.7.7
  @tamagui/core: 2.7.7
  @tamagui/web: 2.7.7
  expo: 57.0.23
  react: 19.2.3
  react-native: 0.86.3
  react-native-safe-area-context: 5.7.0