La tastiera software Android copre il campo EditText


Risposte:


163

Stai chiedendo come controllare ciò che è visibile quando si apre la tastiera virtuale? Potresti voler giocare con windowSoftInputMode . Consulta i documenti per gli sviluppatori per ulteriori discussioni.


2
Funziona bene, ma assicurati di avere <item name = "android: windowIsFloating"> true </item> nel tuo stile di dialogo, nel caso tu stia usando uno stile di dialogo personalizzato.
Dmitry Chistyakov,

Sembra che questo non funzioni in modalità orizzontale (Nexus 7), l'elemento modificabile rimane nascosto sotto la tastiera. Ho provato diverse combinazioni di windowSoftInputMode. Sembra che non riesca a impostare windowIsFloating perché ActionBar non lo supporterà. O potrebbe anche avere qualcosa a che fare con il fatto che il mio EditText è all'interno dell'elemento di visualizzazione elenco?
Sampo Sarrala - codidact.org

Questo non funzionerà dopo aver aggiunto <item name = "android: windowTranslucentStatus"> true </item> nei miei. Qualcuno ha risolto questo?
Max

1
@Max Aggiungi android:fitsSystemWindows="true"alla tua vista radice per risolvere questo.
David Passmore,

1
Che ne dici di estrarre il layout completo sopra la tastiera quando è disponibile la tastiera
virtuale,

162

Ho avuto gli stessi problemi. Prova il seguente codice:

android:windowSoftInputMode="adjustPan"

aggiungilo a manifest.xml nel tag attività dell'attività che contiene l'input. esempio:

<activity
            android:name=".Activities.InputsActivity"
            ...
            android:windowSoftInputMode="adjustPan"
            />

14
Risposta più semplice! Proprio come una nota, questo deve essere aggiunto nel file manifest e sotto l'attività che vogliamo.
NRR,

4
Nel mio caso, questo almeno non confonde il mio html, come adjustResizefarebbe, ma copre anche i miei campi di input
Rahul Dole,

8
Questo non mi ha aiutato
vikifor il

1
@vikifor, assicurati di aggiungere il tuo edittext in scrollview. Anche se hai solo 3-4 campi nel layout, aggiungi tutti i campi in scrollview. Questo lo rende scorrevole quando si apre la tastiera virtuale.
Kuldeep Sakhiya,

Funziona bene, ma ogni volta che tocco sulla vista Modifica testo, la tastiera viene ridisegnata.
Iqbal,

55

Ho avuto lo stesso problema in cui il softkeyboard era in cima alle viste EditText che erano posizionate nella parte inferiore dello schermo. Sono stato in grado di trovare una soluzione aggiungendo una sola riga all'attività pertinente del mio file AndroidManifest.xml.

android:windowSoftInputMode="adjustResize|stateHidden"

Ecco come appare l'intero tag attività:

<activity
        android:name="com.my.MainActivity"
        android:screenOrientation="portrait"
        android:label="@string/title_activity_main"
        android:windowSoftInputMode="adjustResize|stateHidden" >
    </activity>

Qui il valore più importante è AdjustResize. Ciò sposterà l'intera UI verso l'alto per dare spazio al softkeyboard.


Ma questo potrebbe confondere l'aspetto del tuo html se il tuo css ha valori prevalentemente percentuali
Rahul Dole

Stai indovinando qui o l'hai provato? tra l'altro non dovrebbe rovinare il tuo html. Ho provato con le visualizzazioni web. Sposterà l'intera vista, non i singoli elementi.
DanKodi,

1
L'ho provato. Penso che accada perché il mio CSS ha valori prevalentemente percentuali
Rahul Dole,

@DanKodi Ho provato adjustResize|stateHiddene non ha fatto alcuna differenza adjustPan.
IgorGanapolsky,

25

Perché non provare ad aggiungere un ScrollView per avvolgere qualunque cosa tu voglia scorrere. Ecco come l'ho fatto, dove in realtà lascio un'intestazione in alto che non scorre, mentre i widget della finestra di dialogo (in particolare EditTexts) scorrono quando si apre la tastiera virtuale.

<LinearLayout android:id="@+id/HeaderLayout" >
  <!-- Here add a header or whatever will not be scrolled. -->
</LinearLayout>
<ScrollView android:id="@+id/MainForm" >
  <!-- Here add your edittexts or whatever will scroll. -->
</ScrollView>

In genere avrei un LinearLayout all'interno di ScrollView, ma dipende da te. Inoltre, l'impostazione dello stile della barra di scorrimento su outsideInset aiuta, almeno sui miei dispositivi.


4
Mentre la risposta di Mayra è ciò che tutti dovrebbero fare (e probabilmente ciò che Google pensava che dovessero fare tutti), questo è quello che finisco per fare quasi ogni volta. È l'unico modo per ottenere il controllo reale necessario per rendere corretto il display. Sospiro.
Scott Biggs,

non sottovalutare il commento di Scott. È vero. nel mio caso non volevo ridimensionare o eseguire la panoramica della visualizzazione elenco, ma volevo riprendere il testo di modifica alla fine di tale elenco. Quindi, ho inserito editText in scrollView e funziona come previsto.
Darpan,

15

Tutto quello che devi fare è

android:isScrollContainer="true"

fonte: http://www.davidwparker.com/2011/08/25/android-fixing-window-resize-and-scrolling/


1
Sebbene la risposta stessa non mi sia stata di grande aiuto (l'attributo non era necessario), l'origine collegata contiene la spiegazione completa (il modulo deve essere incorporato in ScrollView). Grazie!
johndodo,

Allo stesso modo, nulla sulla pagina mi ha aiutato, ma il link ha mostrato l'aggiunta di AdjustResize all'attività windosSoftInputMode e ha funzionato.
Steven Smith,

14

Ci scusiamo per aver rianimato un vecchio thread ma nessuno ha menzionato l'impostazione android:imeOptions="flagNoFullscreen"nell'elemento EditText


7
android:windowSoftInputMode="adjustPan"
android:isScrollContainer="true"

funziona per Android EditText, mentre non funziona per webview o xwalkview. Quando la tastiera software nasconde l'input in webview o xwalkview che hai usatoandroid:windowSoftInputMode="adjustResize"


4

Credo che tu possa farlo scorrere usando la trackball, che alla fine potrebbe essere raggiunta programmaticamente attraverso i metodi di selezione, ma è solo un'idea. So che il metodo trackball funziona in genere, ma per quanto riguarda il modo esatto per farlo e farlo funzionare dal codice, non ne sono sicuro.
Spero che aiuti.


Quello di cui penso di aver bisogno è un modo per allungare la finestra "artificialmente" in modo che la vista possa scorrere. Attualmente RelativeLayout è impostato su Android: layout_width = "wrap_content" android: layout_height = "wrap_content"
Alexis,

Allora non conosco una soluzione. Forse potresti voler regolare manualmente i valori di larghezza e altezza in base alle tue esigenze, allungandoli ulteriormente a ciò a cui "wrap_content" sta risolvendo.
Luis Miguel Serrano,

1

aggiungi questa singola riga alla tua attività relativa in cui la cover della tastiera si modifica con il metodo di attività text.inside onCreat ().

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

0

So che questo è vecchio ma nessuna delle soluzioni di cui sopra ha funzionato per me. Dopo un lungo debug, ho capito il problema. La soluzione sta impostando l' android:windowTranslucentStatusattributo su false in my styles.xml


0

Se il campo Modifica testo è coperto dalla tastiera Utilizzare il codice seguente:

    EditText= findViewById(R.id.edittext)
    EditText?.getParent()?.requestChildFocus(EditText,EditText)

Se si desidera che il cursore sia nel FocusText focalizzato, utilizzare EditText.requestFocus()dopo il EditText?.getParent()?.requestChildFocus(EditText,EditText) che aiuta a ottenere lo stato attivo e il cursore nel EditText focalizzato.


-1

Modifica il tuo AndroidManifest.xml

android:windowSoftInputMode="adjustResize"

Aggiungi questo alla vista principale del file di layout.

android:fitsSystemWindows="true"

È tutto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.