Nous utilisons un clavier personnalisé en react-native qui fonctionne bien (uniquement pour Android, pas besoin d'iOS ici), mais qui pose un problème lorsqu'il est utilisé avec une boîte de dialogue modale.
Comme le montre la capture d'écran ci-dessous, le clavier apparaît. en dessous de la modale, rendant impossible la saisie de toute valeur. Nous avons essayé plusieurs options pour les composants modaux, y compris le composant modal react-native par défaut, mais elles donnent toutes le même résultat.
Ce site Commentaire de SO sur une question similaire m'a fait penser que cela pouvait avoir un rapport avec les drapeaux définis sur la boîte de dialogue modale comme expliqué aquí :
Souvent, vous souhaiterez qu'une boîte de dialogue s'affiche au-dessus de la méthode de saisie actuelle, car il n'y a aucune raison pour qu'elle accepte du texte. Pour ce faire, vous pouvez activer l'indicateur de fenêtre WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM (en supposant que votre boîte de dialogue prenne le focus sur l'entrée, comme c'est le cas par défaut) avec le code suivant :
getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
Mais lorsque nous utilisons un clavier Android standard, il s'affiche au-dessus de la modale comme prévu, ce qui ne semble donc pas être le problème. Le clavier est en fait lancé comme une application RN distincte :
rootView.startReactApplication(
((ReactApplication) activity.getApplication()).getReactNativeHost().getReactInstanceManager(),
"CustomKeyboard",
bundle);
final float scale = activity.getResources().getDisplayMetrics().density;
RelativeLayout.LayoutParams lParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, Math.round(216*scale));
lParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
layout.addView(rootView, lParams);
et il est ensuite affiché lorsque l'on met au point la saisie de texte avec :
activity.addContentView(keyboard, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
Je ne connais pas Android, mais je suppose que je dois passer des paramètres supplémentaires comme ces lors de la création de la vue du contenu pour s'assurer qu'elle puisse s'élever au-dessus de mes modales. Suis-je sur la bonne voie ? Avez-vous une idée de ce que pourraient être ces paramètres ?
EDIT : Voici une partie du code pertinent (je pense). react-native-modal
es celui-ci mais l'utilisation du composant modal par défaut de react-native donne le même résultat :
import Modal from 'react-native-modal';
...(parent component code)...
render() {
...
<Modal isVisible={this.state.isShowingDialog}>
...(modal box content, all inside a <View>)...
</Modal>
...
}