from react-native docs :
When running on Android TV the Android framework will automatically
apply a directional navigation scheme based on the relative position
of focusable elements in your views. The Touchable mixin has code
added to detect focus changes and use existing methods to style the
components properly and initiate the proper actions when the view is
selected using the TV remote, so TouchableWithoutFeedback,
TouchableHighlight, TouchableOpacity, and TouchableNativeFeedback will
work as expected. In particular:
onFocus will be executed when the touchable view goes into focus
onBlur will be executed when the touchable view goes out of focus
onPress will be executed when the touchable view is actually selected by pressing the "select" button on the TV remote.
so adding onfocus on TouchableOpacity should work for you the reason it is not you need some changes in AndroidManifest.xml to activate android tv mode
<!-- Add custom banner image to display as Android TV launcher icon -->
<application
...
android:banner="@drawable/tv_banner"
>
...
<intent-filter>
...
<!-- Needed to properly create a launch intent when running on Android TV -->
<category android:name="android.intent.category.LEANBACK_LAUNCHER"/>
</intent-filter>
...
</application>
also, you can use tvParallaxProperties and hasTVPreferredFocus to show the initial focus but it has limited effects
<TouchableHighlight
hasTVPreferredFocus
tvParallaxProperties={{ magnification: 1.2 }}
>
<Text>Button</Text>
</TouchableHighlight>
https://reactnative.dev/docs/touchableopacity#tvparallaxproperties-android
TouchableWithoutFeedbackvia the TV remote. In the emulator, I can use the mouse to click the button however.focusable={true}TouchableHighlightbut I didn't understand very well what you mean with opacity change is too small, does it mean thatTouchableHighlightdoes show the change you want but is not enough? because I see it has an activeopacity prop that you could set to 1 and set the color with underlaycolor