2013-04-21 9 views
33

Sto provando a creare un'attività con un listview e un messaggio di invio in fondo. Il problema è che quando viene mostrata la tastiera, invece di spingere il contenuto in basso, lo si nasconde. Ho provato ad usare adjustPan, ma spinge la vista del foro verso l'alto (quindi non c'è modo di vedere gli elementi in cima alla listview e anche la barra delle azioni scompare).Premere Listview quando la tastiera appare senza adjustPan

Se dai un'occhiata a WhatsApp o Line, la funzionalità è che quando l'ultimo elemento della lista viene visualizzato nella parte inferiore dello schermo, la tastiera spinge verso l'alto il listview (senza prendere la barra delle azioni o i primi elementi fuori dallo schermo), e quando l'ultima voce della lista non viene mostrata (dopo un po 'di scorrimento verso l'alto) la tastiera è nascosta nella lista in basso (un normale AdjustResize).

Chiunque ha risolto questo problema?

grazie

EDIT:

cercherò di mettere un esempio visivo:

Allora supponiamo questo ListView:

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

L'EditText non è parte di ListView, ma un LinearLayout allineato in basso. Quando viene mostrata la tastiera, il ListView diventa come questo (elemento 3 e 4 sono nascosti per tastiera):

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

e quello che vorrei ottenere è:

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

ho provato l'androide : windowSoftInputMode = "adjustPan". e il risultato è che in effetti gli articoli 3 e 4 sono spinti verso l'alto e non sono più nascosti dalla tastiera. Il problema è che spinge il listview, ma lo spinge fuori dallo schermo, quindi l'actionBar scompare, e anche se si prova a scorrere verso l'alto, non riesco mai a vedere gli oggetti 1 e 2 con la tastiera mostrata.

speranza io ho spiegato, non è davvero facile ..

Grazie

+1

Puoi pubblicare un colpo di schermo come appare attualmente, non è molto chiaro per me quale sia il problema. – wangyif2

+0

Ho aggiunto un esempio per provare a spiegare. Grazie – Mehdi

risposta

50

Ok ho trovato una soluzione per voi, che cosa si vuole fare è essenzialmente avere la pergamena ListView a fondo ogni volta. È possibile eseguire questa operazione:

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

Se si tratta di un Activity, fate in onCreate. Se è un Fragment, fallo nel onViewCreated.

+2

Ciao, grazie. In realtà scorre la lista fino in fondo. Il problema è che quando faccio scorrere il listview, e poi mostro la tastiera, scorre di nuovo la listview in basso. Questo farà perdere all'utente l'oggetto che stava vedendo. Come esempio, guarda l'app WhatsApp/LINE se ce l'hai.quando lo apri, la listview è in fondo, mostra la tastiera, vedi ancora l'ultimo elemento, rimuovi la tastiera e scorri verso l'alto, poi mostra di nuovo la tastiera, la listview non scorre verso il basso ... Grazie ancora – Mehdi

+0

Ah, vedo quello che vuoi, ho aggiornato la risposta e l'ho testata, dovrei fare esattamente come dici tu. Per favore accetta se lo risolve anche per te. – wangyif2

+2

Dannazione. Non posso credere che tutto il tempo perso xD. Grazie – Mehdi

14

nel layout XML:

android:stackFromBottom="true" 
android:transcriptMode="normal" 
+0

android: stackFromBottom = "true" non necessario – NarendraJi

0

soluzione linea singola

list_view.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); 
Problemi correlati