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.

Antworten:


59

Setzen Sie die windowSoftInputModeEigenschaft auf adjustPanundadjustResize

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

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>

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);

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


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">

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.


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.


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);

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>

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>

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.


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.
    }

0

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


0

Das funktioniert wie ein Zauber für mich

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

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.


-2

Dies wird auf jeden Fall für Sie funktionieren.

android: windowSoftInputMode = "adjustPan"


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.