Touchable focus events not triggering with keyboard (needed for accessibility)
Personne n'a encore pris cette issue.
- Langage dominant
- C++
- Étoiles
- 127k
- Forks
- 25.3k
- Merge moyen
- 1 j 23 h
- PR mergées (30 j)
- 4
Description
Description
I am trying to add custom focus styles if a pressable is focused to make the keyboard focus visible in any case (dark/light mode, different background colors etc).
It seems like TouchableOpacity and TouchableHightlight both get forwarded from TouchableWithoutFeedback, which has the onFocus and onBlur events. I was trying to hold a focus state with these events to render styles dynamically. However, they do not get triggered at all, even if I use TouchableWithoutFeedback, which leads me to think that's the culprit.
Accessibility requires visibility of focus states. Is there another way to retrieve focus states?
Steps to reproduce
Here's a little example:
const [isFocused, setIsFocused] = useState(false);
return (
// same with `TouchableWithoutFeedback` and `TouchableOpacity`
<TouchableHighlight
onFocus={() => setIsFocused(true)}
onBlur={() => setIsFocused(false)}
style={{
backgroundColor: isFocused?"gray":"transparent",
}}
>
...
</TouchableHighlight>
);
React Native Version
0.74.3
Affected Platforms
Runtime - Android
Output of npx react-native info
System:
OS: macOS 14.5
CPU: (12) arm64 Apple M2 Pro
Memory: 109.05 MB / 16.00 GB
Shell:
version: "5.9"
path: /bin/zsh
Binaries:
Node:
version: 20.13.1
path: ~/Library/Caches/fnm_multishells/94190_1719818822541/bin/node
Yarn: Not Found
npm:
version: 10.5.2
path: ~/Library/Caches/fnm_multishells/94190_1719818822541/bin/npm
Watchman:
version: 2024.06.10.00
path: /opt/homebrew/bin/watchman
Managers:
CocoaPods:
version: 1.15.2
path: /Users/d.timur/.rbenv/shims/pod
SDKs:
iOS SDK:
Platforms:
- DriverKit 23.5
- iOS 17.5
- macOS 14.5
- tvOS 17.5
- visionOS 1.2
- watchOS 10.5
Android SDK: Not Found
IDEs:
Android Studio: 2023.2 AI-232.10300.40.2321.11668458
Xcode:
version: 15.4/15F31d
path: /usr/bin/xcodebuild
Languages:
Java:
version: 17.0.11
path: /opt/homebrew/opt/openjdk@17/bin/javac
Ruby:
version: 2.7.6
path: /Users/d.timur/.rbenv/shims/ruby
npmPackages:
"@react-native-community/cli": Not Found
react:
installed: 18.2.0
wanted: 18.2.0
react-native:
installed: 0.74.2
wanted: 0.74.2
react-native-macos: Not Found
npmGlobalPackages:
"*react-native*": Not Found
Android:
hermesEnabled: true
newArchEnabled: false
iOS:
hermesEnabled: true
newArchEnabled: false
Stacktrace or Logs
-
Reproducer
https://github.com/proohit/focus-example
Screenshots and Videos
No response
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par le reproducer focus-example lié et suivez la manière dont TouchableHighlight, TouchableOpacity et TouchableWithoutFeedback gèrent onFocus et onBlur sur Android. Confirmez le comportement du focus clavier et définissez la fin du travail comme le déclenchement fiable des événements de focus, afin qu’un style de focus visible personnalisé puisse être rendu.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- react-native, typescript
- Domaine
- accessibility, mobile
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100