Je sais qu'il y a beaucoup de questions similaires ici mais je n'ai réussi à faire fonctionner aucune des solutions fournies dans une application de test simple.
Le problème survient lorsque le clavier virtuel est affiché pour la première fois. Dès qu'il est affiché, il est seulement possible de le rendre éditable en appuyant à nouveau sur editText.
J'ai essayé ce qui suit:
android:windowSoftInputMode="adjustPan|adjustResize"
Cela ne résout aucun problème. Il semble que cette ligne soit obligatoire pour redimensionner l'activité après l'affichage du clavier virtuel. Malheureusement, cela entraîne également la perte du focus pour tout EditText. Cela est probablement dû au fait que le ListView lui-même gagne le focus après le redimensionnement. J'ai donc essayé l'astuce suivante:
listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
Cela fait toujours en sorte que le premier EditText visible contenu dans le ListView
gagne le focus, ce qui est indésirable. Le deuxième EditText dans la deuxième rangée devrait plutôt gagner le focus lorsqu'il est pressé, ce qui n'arrive pas. De plus, si j'arrive finalement à mettre le focus sur un autre EditText que le premier affiché (par exemple en appuyant sur 'Suivant' sur le clavier virtuel
), le premier affiché recevra le focus après que le clavier soit caché et que le ListView soit redimensionné à sa taille normale.
J'ai essayé plusieurs autres choses comme intercepter les événements onFocusChange()
pour le ListView, tout en sachant quel EditText a été pressé grâce à son TouchListener
. Demander à ce certain EditText de reprendre le focus n'a pas non plus donné de résultats.
Utiliser un ScrollView
au lieu d'un ListView
comme suggéré par d'autres utilisateurs n'est pas une option pour le projet concerné.
0 votes
Salut, je suppose que ce qui se passe ici n'est pas que le
EditText
doit être pressé une fois de plus, pour être opérationnel, mais le fait que le clavier virtuel apparaît, car il est déclenché par un champ, qui est éditable et prend le focus au départ. Vous pouvez essayer cecipublic void hideSoftKeyboard(View v) { Activity activity = (Activity) v.getContext(); InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); }
.0 votes
Cela empêchera le
clavier virtuel
d'apparaître au début et je suppose que l'EditText
devrait simplement être pressé pour déclencher la modification dedans.0 votes
@g00dy, le problème n'est pas que le clavier apparaît initialement mais entrer du texte ne fonctionne pas correctement.
0 votes
Ok, es-tu sûr que le
EditText
problématique obtient le focus la première fois que le clavier apparaît? Ce que je veux dire, c'est où est situé leRequestFocus
?0 votes
Un lien vers ceci pourrait être trouvé ici-> developer.android.com/guide/topics/resources/…