web-dev-qa-db-fra.com

Appuyez sur Listview lorsque le clavier apparaît sans ajustement

J'essaie de créer une activité avec une liste et un message d'envoi en bas. Le problème est que lorsque le clavier est affiché, au lieu de pousser le contenu du bas, il ne fait que le cacher. J'ai essayé d'utiliser adjustPan, mais cela pousse la vue du trou vers le haut (il n'y a donc aucun moyen de voir les éléments supérieurs de la liste et la barre d'action disparaît également).

Si vous jetez un œil à WhatsApp ou à Line, la fonctionnalité est que lorsque le dernier élément de la liste est affiché en bas de l'écran, le clavier fait monter la vue de liste (sans retirer la barre d'action ou les premiers éléments de l'écran) ), et lorsque le dernier élément de la liste n'est pas affiché (après un certain défilement vers le haut), le clavier est masqué dans la liste du bas (un ajustement normal de redimensionnement).

Quelqu'un a traité ce problème?

merci

MODIFIER:

Je vais essayer de mettre un exemple visuel:

Disons donc ceci le ListView:

---item 1---  
---item 2---  
---item 3---  
---item 4---  
---EditText---

Le editText ne fait pas partie de ListView, mais un LinearLayout aligné en bas. Lorsque le clavier est affiché, le ListView devient comme ceci (les éléments 3 et 4 sont masqués par le clavier):

---item 1---  
---item 2---  
---EditText---
---Keyboard---  

et ce que je voudrais obtenir c'est:

---item 3---  
---item 4---  
---EditText---
---Keyboard---  

J'ai essayé Android: windowSoftInputMode = "adjustPan". Et le résultat est que les éléments 3 et 4 sont effectivement poussés vers le haut et ne sont plus masqués par le clavier. Le problème est qu'il pousse la vue de liste, mais il la pousse hors de l'écran, de sorte que l'actionBar disparaît, et même si j'essaie de faire défiler vers le haut, je ne peux jamais voir les éléments 1 et 2 avec le clavier illustré.

J'espère que je me suis expliqué, pas vraiment facile ..

Merci

34
Mehdi

D'accord, j'ai trouvé une solution pour vous, ce que vous voulez faire, c'est essentiellement faire défiler ListView vers le bas à chaque fois. Vous pouvez le faire en:

ListView l = getListView();
l.setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL);
l.setStackFromBottom(true);

S'il s'agit d'un Activity, faites-le dans onCreate. S'il s'agit d'un Fragment, faites-le dans onViewCreated.

53
wangyif2

Dans votre mise en page XML:

Android:stackFromBottom="true"
Android:transcriptMode="normal"
13
s0i1

Solution monoligne

list_view.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
1
Munish Kapoor