Die Android-Softtastatur deckt das EditText-Feld ab


Antworten:


163

Fragen Sie, wie Sie steuern können, was beim Öffnen der Softtastatur sichtbar ist? Möglicherweise möchten Sie mit dem windowSoftInputMode spielen . Weitere Informationen finden Sie in den Entwicklerdokumenten .


2
Dies funktioniert einwandfrei, aber stellen Sie sicher, dass Sie in Ihrem Dialogstil <item name = "android: windowIsFloating"> true </ item> haben, falls Sie einen benutzerdefinierten Dialogstil verwenden.
Dmitry Chistyakov

Es scheint, dass dies im Querformat (Nexus 7) nicht funktioniert. Das bearbeitbare Element bleibt unter der Tastatur verborgen. Ich habe verschiedene Kombinationen von windowSoftInputMode ausprobiert. Es scheint, dass ich windowIsFloating nicht festlegen kann, da ActionBar dies nicht unterstützt. Oder hat es auch etwas damit zu tun, dass sich mein EditText in der Listenansicht befindet?
Sampo Sarrala - codidact.org

Dies funktioniert nicht, nachdem <item name = "android: windowTranslucentStatus"> true </ item> in meinen hinzugefügt wurde. Hat jemand das behoben?
Max

1
@Max Fügen Sie android:fitsSystemWindows="true"Ihrer Stammansicht hinzu , um dies zu lösen.
David Passmore

1
Was ist mit dem vollständigen Layout über die Tastatur zu ziehen, wenn eine Softtastatur verfügbar ist, egal wie WhatsApp ...
Karue Benson Karue

162

Ich hatte die gleichen Probleme. Versuchen Sie folgenden Code:

android:windowSoftInputMode="adjustPan"

Fügen Sie es Ihrer manifest.xml im Aktivitäts-Tag der Aktivität hinzu, die die Eingabe enthält. Beispiel:

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

14
Einfachste Antwort! Nur als Hinweis muss dies in der Manifest-Datei und unter der gewünschten Aktivität hinzugefügt werden.
NRR

4
In meinem Fall bringt dies zumindest mein HTML nicht durcheinander, wie adjustResizees tun würde, aber es deckt auch meine Eingabefelder ab
Rahul Dole

8
Das hat mir nicht geholfen
Vikifor

1
@vikifor, stellen Sie sicher, dass Sie Ihren Edittext in die Bildlaufansicht einfügen. Auch wenn Ihr Layout nur 3-4 Felder enthält, fügen Sie alle Felder in die Bildlaufansicht ein. Dies macht es scrollbar, wenn die virtuelle Tastatur geöffnet wird.
Kuldeep Sakhiya

Funktioniert einwandfrei, aber wenn ich die EditText-Ansicht berühre, wird die Tastatur neu gezeichnet.
Iqbal

55

Ich hatte das gleiche Problem, bei dem sich das Softkeyboard über den EditText-Ansichten befand, die sich am unteren Bildschirmrand befanden. Ich konnte eine Lösung finden, indem ich der relevanten Aktivität meiner AndroidManifest.xml-Datei eine einzelne Zeile hinzufügte.

android:windowSoftInputMode="adjustResize|stateHidden"

So sieht das gesamte Aktivitäts-Tag aus:

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

Hier ist der wichtigste Wert die adjustResize. Dadurch wird die gesamte Benutzeroberfläche nach oben verschoben, um Platz für das Softkeyboard zu schaffen.


Aber dies kann das Aussehen Ihres HTML durcheinander bringen, wenn Ihr CSS hauptsächlich Prozentwerte aufweist
Rahul Dole

Raten Sie hier oder haben Sie es versucht? Übrigens sollte es Ihr HTML nicht durcheinander bringen. Ich habe es mit Webviews versucht. Es wird die gesamte Ansicht verschieben, nicht einzelne Elemente.
DanKodi

1
Ich versuchte es. Ich denke, es passiert, weil mein CSS meistens Prozentwerte hat
Rahul Dole

@ DanKodi Ich habe es versucht adjustResize|stateHiddenund es machte keinen Unterschied adjustPan.
IgorGanapolsky

25

Warum nicht versuchen, eine ScrollView hinzuzufügen, um alles zu verpacken, was Sie scrollen möchten? Hier ist, wie ich es gemacht habe, wo ich tatsächlich eine Kopfzeile oben lasse, die nicht scrollt, während die Dialog-Widgets (insbesondere die EditTexts) scrollen, wenn Sie die Soft-Tastatur öffnen.

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

Normalerweise habe ich ein LinearLayout in der ScrollView, aber das liegt bei Ihnen. Außerdem hilft es zumindest auf meinen Geräten, den Bildlaufleistenstil aufsideInset festzulegen.


4
Während Mayras Antwort lautet, was jeder tun sollte (und wahrscheinlich, was Google von jedem erwartet hat), ist dies das, was ich am Ende fast jedes Mal tue. Dies ist die einzige Möglichkeit, die tatsächliche Kontrolle zu erlangen, die für die korrekte Anzeige erforderlich ist. Seufzer.
Scott Biggs

Unterschätze Scotts Kommentar nicht. Es ist wahr. In meinem Fall wollte ich die Größe meiner Listenansicht nicht ändern oder schwenken, sondern den editText am Ende dieser Liste aufrufen. Also habe ich editText in scrollView eingefügt und es funktioniert wie erwartet.
Darpan

15

Alles was Sie tun müssen, ist

android:isScrollContainer="true"

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


1
Während die Antwort selbst mir nicht viel half (Attribut wurde nicht benötigt), enthält die verknüpfte Quelle die vollständige Erklärung (das Formular sollte in ScrollView eingebettet sein). Vielen Dank!
Johndodo

Ebenso hat mir nichts auf der Seite geholfen, aber der Link zeigte das Hinzufügen von adjustResize zur Aktivität windosSoftInputMode und das hat funktioniert.
Steven Smith

14

Es android:imeOptions="flagNoFullscreen"tut uns leid, dass Sie einen alten Thread wiederbelebt haben, aber niemand hat die Einstellung in Ihrem EditText-Element erwähnt


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

funktioniert für Android EditText, während es nicht für Webview oder Xwalkview funktioniert. Wenn die Softtastatur die Eingabe in Webview oder Xwalkview ausblendet, die Sie verwendenandroid:windowSoftInputMode="adjustResize"


4

Ich glaube, dass Sie es mit dem Trackball zum Scrollen bringen können, was möglicherweise programmgesteuert durch Auswahlmethoden erreicht wird, aber es ist nur eine Idee. Ich weiß, dass die Trackball-Methode normalerweise funktioniert, aber ich bin mir nicht sicher, wie genau dies funktioniert und wie es aus Code funktioniert.
Hoffentlich hilft das.


Ich denke, ich brauche eine Möglichkeit, das Fenster "künstlich" länger zu machen, damit die Ansicht gescrollt werden kann. Derzeit ist das RelativeLayout auf android gesetzt: layout_width = "wrap_content" android: layout_height = "wrap_content"
Alexis

Ich kenne dann keine Lösung. Vielleicht möchten Sie die Werte für Breite und Höhe manuell an Ihre Bedürfnisse anpassen, indem Sie sie weiter auf das strecken, in das "wrap_content" aufgelöst wird.
Luis Miguel Serrano

1

Fügen Sie diese einzelne Zeile zu Ihrer relativen Aktivität hinzu, in der die Tastaturabdeckung text.inside onCreat () bearbeitet.

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

0

Ich weiß, dass dies alt ist, aber keine der oben genannten Lösungen hat für mich funktioniert. Nach ausgiebigem Debuggen habe ich das Problem herausgefunden. Die Lösung besteht darin, das android:windowTranslucentStatusAttribut in meiner Datei styles.xml auf false zu setzen


0

Wenn das EditText-Feld vom KeyBoard abgedeckt wird, verwenden Sie den folgenden Code:

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

Wenn Sie möchten, dass sich der Cursor im fokussierten EditText befindet, verwenden Sie ihn EditText.requestFocus()nach dem EditText?.getParent()?.requestChildFocus(EditText,EditText) , um den Fokus und den Cursor im fokussierten EditText zu erhalten.


-1

Bearbeiten Sie Ihre AndroidManifest.xml

android:windowSoftInputMode="adjustResize"

Fügen Sie dies Ihrer Stammansicht der Layoutdatei hinzu.

android:fitsSystemWindows="true"

Das ist alles.

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.