it-swarm.com.de

Textfeld unter der Tastatur in der Android-Webansicht versteckt

Ich habe eine einfache iPhone/Android-App erstellt, die einen normalen Webview enthält. Diese Webansicht ruft meine Website auf.

Auf meiner Website gibt es mehrere Formulare mit Eingabetyp = Text oder Textbereich. Ich habe ein Problem damit, wenn sie am Ende der Seite stehen!

1) In meiner iPhone-App wird die Tastatur automatisch angezeigt und das Textfeld in den sichtbaren Bereich des Telefonbildschirms verschoben. Es gibt also nichts zu tun.

2) In meiner Android-App bleibt das Textfeld jedoch an der gleichen Stelle und wird schließlich von meiner Tastatur ausgeblendet. Die einzige Option, die Benutzer haben, ist "blind" einzugeben.

Wie kann ich das beheben? Hat jemand anderes dieses Problem gefunden?

43
andreas

So habe ich das Problem gelöst. Wie Venky sagte, muss man hinzufügen

Android:windowSoftInputMode="adjustResize"

zu Ihrem Tag in der Datei AndroidManifest.xml. Aber in unserem Fall hat es nicht gereicht. Stellen Sie sicher, dass Sie dies auch mit Ihren Ansichten, Webviews usw. tun. Dann haben wir es endlich geschafft.

41
andreas

Ich wurde verrückt, nichts funktioniert Android:windowSoftInputMode="adjustResize" kann helfen, aber stellen Sie sicher, dass Ihre App nicht im Vollbildmodus angezeigt wird.

Durch das Entfernen des Vollbildschirms für meine App wurde das Problem mit der Größenänderung des Layouts mit dem Softkeyboard behoben.

<item name="Android:windowFullscreen">false</item>
25
Sandro

Das würde funktionieren:

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

3
Tsasaa

Einige Dinge, die ich bei der Lösung dieses Problems gelernt habe --- 1. Der Designstil sollte nicht Fullscreen True 2 enthalten. Fügen Sie Android hinzu: windowSoftInputMode = "adjustResize" 3. Entfernen Sie Android: scrollbars = "none" ist keine ... Prost!

2
Surjeet

In meinem Fall werden die Erfolge erzielt durch:

  1. Hinzufügen zu Manifest, Webview und Fragment:

    Android:windowSoftInputMode="adjustResize"
    
  2. Verwenden Sie NON FullScreen Theme wie folgt:

    <style name="AppTheme" parent="Android:Theme.Black.NoTitleBar">
        <item name="Android:windowNoTitle">true</item>
        <item name="Android:windowActionBar">false</item>
        <item name="Android:windowFullscreen">false</item>
    </style>
    
  3. KEINE Verwendung von ScrollView über WebView.
1
Pawel

Für Aktivitäten im Vollbildmodus funktioniert Android: windowSoftInputMode = "adjustResize" nicht.

https://developer.Android.com/reference/Android/view/WindowManager.LayoutParams.html#FLAG_FULLSCREEN

Ein Vollbildfenster ignoriert den Wert SOFT_INPUT_ADJUST_RESIZE für das Feld softInputMode des Fensters. Das Fenster bleibt im Vollbildmodus und wird nicht in der Größe verändert.

In der Aktivität wende ich die folgende Methode an, um die Größe des Layouts durch Festlegen eines unteren Abstands zu ändern:


    public void adjustResizeOnGlobalLayout(@IdRes final int viewGroupId, final WebView webView) {
        final View decorView = getWindow().getDecorView();
        final ViewGroup viewGroup = (ViewGroup) findViewById(viewGroupId);

        decorView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            public void onGlobalLayout() {
                DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
                Rect rect = new Rect();
                decorView.getWindowVisibleDisplayFrame(rect);
                int paddingBottom = displayMetrics.heightPixels - rect.bottom;

                if (viewGroup.getPaddingBottom() != paddingBottom) {
                    // showing/hiding the soft keyboard
                    viewGroup.setPadding(viewGroup.getPaddingLeft(), viewGroup.getPaddingTop(), viewGroup.getPaddingRight(), paddingBottom);
                } else {
                    // soft keyboard shown/hidden and padding changed
                    if (paddingBottom != 0) {
                        // soft keyboard shown, scroll active element into view in case it is blocked by the soft keyboard
                        webView.evaluateJavascript("if (document.activeElement) { document.activeElement.scrollIntoView({behavior: \"smooth\", block: \"center\", inline: \"nearest\"}); }", null);
                    }
                }
            }
        });
    }
0
SiuFay

Ja, hatte das gleiche Problem bei der Arbeit mit Webview, meine war mit Eingabe auf modal. Textfeld hat sich nicht über der Tastatur "fokussiert". Die Lösung bestand darin, den Funktionsaufruf zu verzögern. Hoffe, jemand findet das nützlich.

   $("body").on("click", ".jstree-search-input", function () {  

    setTimeout(function(){ 
        androidScroll(); 
    }, 500);
    });

Wie Sie sehen, wird es für die Jstree-Eingabe verwendet ...

   function androidScroll() {
    // Webview focus call (pushes the modal over keyboard)
        $('.control-sidebar-open ').scrollTop($('.control-sidebar-open ')[0].scrollHeight);

}

0
Denis Solakovic

Vorsicht, abgesehen von den vorgeschlagenen Antworten

Android:windowSoftInputMode="adjustResize"

Funktioniert nicht , wenn Sie sich im immersive Modus befinden

0
unlimited101