So verschieben Sie das Layout nach oben, wenn die Softtastatur für Android angezeigt wird

85

Ich habe einen Anmeldebildschirm mit zwei EditTextsund eine Anmeldeschaltfläche in meinem Layout. Das Problem ist, dass zu Beginn der Eingabe die Softtastatur angezeigt wird und die Anmeldeschaltfläche abdeckt. Wie kann ich das Layout nach oben oder über die Tastatur schieben, wenn es angezeigt wird?

Ich möchte a nicht verwenden ScrollView, sondern nur implementieren, ohne nach unten zu scrollen. Bitte schlagen Sie mir eine Möglichkeit vor. Danke im Voraus.

Cavallo
quelle

Antworten:

59

Setzen Sie die windowSoftInputModeEigenschaft auf adjustPanundadjustResize

<activity android:windowSoftInputMode="adjustPan|adjustResize"> </activity>
jeet
quelle
32
Dies funktionierte nicht sofort, aber es wurde geändert, um es zum <activity android:windowSoftInputMode="adjustResize"></activity>Laufen zu bringen.
Nickiaconis
2
Erwähnen Sie, welche Android-Version Sie verwenden. Einige Antworten sind in einigen Versionen möglicherweise völlig nutzlos.
Josh
Wie @nickiaconis sagte, ich brauche nicht 'adjustPan' Parameter und es funktioniert für mich, danke
danisupr4
Gibt es ein Äquivalent für das tragbare Projekt Xamarin.Forms? Ich muss dies also nicht für jede einzelne Zielplattform tun.
user20358
6
Die Einstellung muss einer der in der folgenden Tabelle aufgeführten Werte oder eine Kombination aus einem "Status ..." - Wert und einem "Einstellen ..." - Wert sein. Das Festlegen mehrerer Werte in einer Gruppe - beispielsweise mehrerer "Status ..." - Werte - führt zu undefinierten Ergebnissen. developer.android.com/guide/topics/manifest/…
EmJiHash
34

Versuchen Sie dies in der Android-Manifest-Datei, die der Aktivität entspricht.

<activity android:windowSoftInputMode="adjustPan"> </activity>
jency
quelle
1
Mein Loyout bewegt sich beim ersten Mal nach oben, aber wenn ich die Tastatur schließe und wieder öffne, bewege ich mich nicht.
Nabeghe
24

Verwenden Sie diesen Code in der onCreate()Methode:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
Bobs
quelle
1
Danke, das hat geholfen. <activity android: windowSoftInputMode = "adjustPan"> </ activity> hat aus irgendeinem Grund bei mir nicht funktioniert.
DH28
1
Diese Methode, aber SOFT_INPUT_ADJUST_RESIZEanstelle von ADJUST_PAN verwenden, funktionierte für mich
Voy
16

nur

android:windowSoftInputMode="adjustResize"

in Ihrem Aktivitäts-Tag in der Manifest-Datei wird den Trick tun

Bhargav Thanki
quelle
Ich verwende ConstraintLayout, diese Lösung funktioniert bei mir nicht.
Karan Sharma
Zum Zeitpunkt des Schreibens dieser Antwort wurde ConstraintLayout nicht in Android-Layouts hinzugefügt. In diesem Thread finden Sie bitte eine andere Lösung, die am besten zu Ihnen passt. Und sicherlich werde ich meine Antwort für ConstraintLayout aktualisieren, sobald ich Zeit habe. Vielen Dank für die Berichterstattung
Bhargav Thanki
12

Fügen Sie diese Zeile in die Aktivitätsdeklarationszeit in manifest.xml ein

<android:windowSoftInputMode="adjustPan">
Dayanand Waghmare
quelle
10

Ich habe dies irgendwie erreicht, indem ich den Status der Softtastatur auf dem Gerät kannte. Ich verschiebe das Layout in die y-Position, wenn die Tastatur angezeigt wird, und in die ursprüngliche Position zurück, wenn sie nicht angezeigt wird. Dies funktioniert gut, befolgt diese Richtlinien.

Cavallo
quelle
2
Ich kann das Layout nach oben verschieben, wenn die Tastatur angezeigt wird, aber ich kann nicht in die ursprüngliche Position wechseln, während sich die Tastatur versteckt. Kannst du mir dabei helfen?
Kishore
8
android:fitsSystemWindows="true"

Eigenschaft zum Hauptlayout der Layoutdatei hinzufügen und

android:windowSoftInputMode="adjustResize"

Fügen Sie in Ihrer Manifest.xml-Datei eine Zeile in Ihrer Activty hinzu

Es ist die perfekte Arbeit für mich.

Kalsariya Devindra
quelle
fitSystemWindows hat nichts mit der Tastatur zu tun
Tim
@ TimCastelijns, in meinem Fall (Vollbildaktivität) hat es eine Rolle. Wenn diese Option aktiviert ist false, werden die Ansichten nicht nach oben verschoben.
CoolMind
6

Fügen Sie dies in Ihre Aktivitätsdeklaration in die Manifestdatei ein <activity android:windowSoftInputMode="adjustPan|adjustResize"> </activity>

Wenn Sie möchten, können Sie die onCreate () -Methode Ihrer Aktivität hinzufügen

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
Pradnya Kanase
quelle
1
Manifest-Code ist falsch, auf diese Weise ist das Verhalten undefiniert (Sie legen zwei Konfliktwerte fest, siehe offdoc: developer.android.com/guide/topics/manifest/… , android:windowSoftInputModeBeschreibung). @ kiwicomb123, wählen Sie einen Parameter oder das System wählt für Sie (und diese Auswahl kann sich auf einem anderen Gerät / API-Überprüfung ändern)
kpower
3

Das ist alles was benötigt wird:

<activity android:windowSoftInputMode="adjustResize"> </activity>
Bolling
quelle
2

Gemäß diesem Handbuch können Sie dies in diesem Manifest korrekt erklären, indem Sie Folgendes angeben :

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

    </activity>
David_E
quelle
Es sieht so aus, als würde stateVisible es beim Start der Aktivität öffnen, sodass es nicht erforderlich ist, die Tastatur tatsächlich nach oben zu drücken.
CodyEngel
2

Wenn das Softkeyboard angezeigt wird, ändert sich die Größe des Hauptlayouts. Sie müssen lediglich einen Listener für dieses Mainlayout erstellen und in diesem Listener den Code hinzufügen, um scrollT0(x,y)nach oben zu scrollen.

Dila Gurung
quelle
2

Wenn Sie mit Xamarin arbeiten, können Sie diesen Code WindowSoftInputMode =Android.Views.SoftInput.AdjustPan | Android.Views.SoftInput.AdjustResizein das Aktivitätsattribut der MainActivity-Klasse einfügen. Zum Beispiel sieht das Aktivitätsattribut jetzt wie folgt aus

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

Verwenden Sie das relative Layout, um die Ansicht so anzupassen, dass Sie diese Ansicht sehen können, während Sie den Text eingeben

Mahesh
quelle
0

Das funktioniert wie ein Zauber für mich

getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
droidchef
quelle
0

Du solltest benutzen

android:windowSoftInputMode="adjustPan|stateHidden"

in Ihrer AndroidManifest.xmlDatei, in der Sie Ihre Aktivität deklarieren. Dadurch wird der Inhalt Ihres Layouts angepasst, wenn die Tastatur im Layout angezeigt wird.

Farhan Ghaffar
quelle
-2

Dies wird auf jeden Fall für Sie funktionieren.

android: windowSoftInputMode = "adjustPan"

Sanjay Kumar
quelle
1
Können Sie eine Erklärung hinzufügen ...?
Chevybow
Gehen Sie einfach zu Ihrer AndroidManifest.xml-Datei und dieses Tag zu der Aktivität, die Sie auf der Tastatur nach oben
scrollen möchten