Come spostare il layout verso l'alto quando viene visualizzata la tastiera virtuale Android


85

Ho una schermata di accesso con due EditTextse un pulsante di accesso nel mio layout. Il problema è che, quando inizio a digitare, viene visualizzata la tastiera virtuale e copre il pulsante di accesso. Come posso spingere il layout verso l'alto o sopra la tastiera quando appare?

Non voglio usare un ScrollView, voglio solo implementarlo senza scorrere verso il basso. Per favore, suggeriscimi un modo per farlo. Grazie in anticipo.

Risposte:


59

Imposta la windowSoftInputModeproprietà su adjustPaneadjustResize

<activity android:windowSoftInputMode="adjustPan|adjustResize"> </activity>

32
Questo non ha funzionato immediatamente, ma cambiarlo per <activity android:windowSoftInputMode="adjustResize"></activity>farlo funzionare.
nickiaconis

2
Indica quale versione di Android stai utilizzando. Alcune risposte possono essere totalmente inutili su alcune versioni.
Josh

come ha detto @nickiaconis, non ho bisogno del parametro "AdjustPan" e funziona per me, grazie
danisupr4

È disponibile un equivalente per il progetto portabile Xamarin.Forms? quindi non devo farlo per ogni singola piattaforma di destinazione.
user20358

6
L'impostazione deve essere uno dei valori elencati nella tabella seguente o una combinazione di un valore "stato ..." più un valore "regolazione ...". L'impostazione di più valori in entrambi i gruppi, ad esempio più valori di "stato ...", ha risultati indefiniti. developer.android.com/guide/topics/manifest/…
EmJiHash

34

Prova questo nel file manifest di Android corrispondente all'attività.

<activity android:windowSoftInputMode="adjustPan"> </activity>

1
il mio loyout si sposta verso l'alto la prima volta, ma quando chiudi la tastiera e riapri, non muoverti.
nabeghe

24

Usa questo codice nel onCreate()metodo:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

1
Grazie, questo ha aiutato. <activity android: windowSoftInputMode = "AdjustPan"> </activity> non ha funzionato per me per qualche motivo.
DH28

1
Questo metodo, ma utilizzato al SOFT_INPUT_ADJUST_RESIZEposto di ADJUST_PAN, ha funzionato per me
Voy

16

solo

android:windowSoftInputMode="adjustResize"

nel tuo tag attività all'interno del file Manifest farà il trucco


Sto usando ConstraintLayout, questa soluzione non funziona per me.
Karan Sharma

Al momento della stesura di questa risposta, ConstraintLayout non è stato aggiunto nei layout Android. Si prega di trovare qualsiasi altra soluzione su questo thread che più vi si addice. E sicuramente aggiornerò la mia risposta per ConstraintLayout una volta che avrò il tempo. Grazie per la segnalazione
Bhargav Thanki,

12

Inserisci questa riga nell'ora della dichiarazione di attività in manifest.xml

<android:windowSoftInputMode="adjustPan">

10

In qualche modo ho ottenuto questo risultato conoscendo lo stato della tastiera virtuale sul dispositivo. sposto il layout nella posizione y quando viene visualizzata la tastiera e torna alla posizione originale quando non viene visualizzata. questo funziona bene, ha seguito queste linee guida.


2
Sono in grado di spostare il layout verso l'alto quando viene visualizzata la tastiera, ma incapace di spostarmi nella posizione originale mentre la tastiera si nasconde, puoi aiutarmi in questo.
Kishore

9
android:fitsSystemWindows="true"

aggiungi proprietà sul layout principale del file di layout e

android:windowSoftInputMode="adjustResize"

aggiungi una riga nel tuo file Manifest.xml su Activty

è un lavoro perfetto per me.


fitsSystemWindows non ha nulla a che fare con la tastiera
Tim

@TimCastelijns, nel mio caso (attività a schermo intero) ha importanza. Se impostato su false, le visualizzazioni non saliranno.
CoolMind

6

Inseriscilo nella tua dichiarazione di attività nel file manifest <activity android:windowSoftInputMode="adjustPan|adjustResize"> </activity>

o se vuoi puoi aggiungere il metodo onCreate () della tua attività

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

1
Il codice manifest è sbagliato, in questo modo il comportamento è indefinito (imposti due valori di conflitto, vedi offdoc: developer.android.com/guide/topics/manifest/… , android:windowSoftInputModedescrizione). @ kiwicomb123, scegli un parametro o il sistema sceglierà per te (e questa scelta può cambiare su un altro dispositivo / versione API)
kpower

3

Questo è tutto ciò che serve:

<activity android:windowSoftInputMode="adjustResize"> </activity>

2

In base a questa guida , il modo corretto per ottenere ciò è dichiarare nel manifest:

<activity name="EditContactActivity"
        android:windowSoftInputMode="stateVisible|adjustResize">

    </activity>

Sembra che stateVisible si aprirà quando inizia l'attività, quindi non è necessario spingere effettivamente la tastiera verso l'alto.
CodyEngel

2

Quando appare la softkeyboard, cambia la dimensione del layout principale e quello che devi fare è creare un listener per quel mainlayout e all'interno di quel listener, aggiungi il codice scrollT0(x,y)per scorrere verso l'alto.


2

Se stai lavorando con xamarin, puoi inserire questo codice WindowSoftInputMode =Android.Views.SoftInput.AdjustPan | Android.Views.SoftInput.AdjustResizenell'attributo di attività della classe MainActivity. Ad esempio, ora l'attributo dell'attività apparirà come di seguito

    [Activity(WindowSoftInputMode =Android.Views.SoftInput.AdjustPan | Android.Views.SoftInput.AdjustResize)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
    {
        //some code here.
    }

0

Utilizza il layout relativo per regolare la visualizzazione in modo che tu possa vedere quella vista durante la digitazione del testo


0

Questo funziona come un fascino per me

getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

0

Dovresti usare

android:windowSoftInputMode="adjustPan|stateHidden"

nel AndroidManifest.xmlfile in cui dichiari la tua attività. Questo regolerà il contenuto del layout, quando la tastiera è mostrata nel layout.


-2

Questo funzionerà sicuramente per te.

android: windowSoftInputMode = "AdjustPan"


1
Puoi aggiungere qualche spiegazione ...?
chevybow

Vai al tuo file AndroidManifest.xml e questo tag all'attività che vuoi scorrere verso l'alto sul pop-up della tastiera
sanjay kumar
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.