2013-08-19 16 views
6

ich eine Web-Anwendung für Firefox OS entwickelt habe, aber ich wollte es „nativ“ in Android laufen zu lassen. Meine Anwendung besteht aus einer Dialogbox, die eine div ist, die die gesamte Seite füllt, wenn sie sichtbar ist, was ich mit dem responsive Design-Tool von Firefox getestet habe und die Größe wird korrekt angepasst. Wenn eine Bildschirmtastatur angezeigt wird, möchte ich, dass sich der Dialog auf das verbleibende Ansichtsfenster ändert, da sich am unteren Rand des Dialogs einige Schaltflächen befinden.WebView ist die Größe nicht

Ich habe eine Anwendung mit einer einzigen Aktivität erstellt, die nur eine WebView enthält. Ich wollte die Ansicht, um die Größe, wenn die Tastatur erscheint, so dass ich verwendet:

android:windowSoftInputMode="stateUnspecified|adjustResize" 

, die keinen Unterschied zu den WebView zu machen schien, wenn die Tastatur sichtbar war. Ich schaute online und es gab viele Leute, die sich über dieses Problem beschwerten, aber sie hatten alle das gleiche gemeinsam, sie benutzten das Theme.Black.NoTitleBar.Fullscreen Thema, was ich nicht bin. Ich habe alle Lösungen für dieses Problem ausprobiert, aber keiner von ihnen hat funktioniert.

Ich begann dann zu fragen, ob es einen Fehler in WebView gab, was bedeutete, dass es nicht die Größe änderte. Also, ich schrieb eine benutzerdefinierte View, die die Abmessungen in onLayout gedruckt.

@Override 
protected void onLayout(boolean changed, int l, int t, int r, int b) { 
    Log.d(TAG, t + " " + r + " " + b + " " + l); 
} 

Und tatsächlich, die Ansicht wurde korrekt skaliert, wenn die Tastatur erschien und nicht mehr verfügbar war. Also habe ich ein wenig mehr recherchiert und ein paar Antworten gefunden, die besagten, dass Sie die WebView verstecken, neu laden und dann wieder anzeigen müssen.

@Override 
protected void onLayout(boolean changed, int l, int t, int r, int b) { 
    Log.d(TAG, t + " " + r + " " + b + " " + l); 

    mWebView.setVisibility(View.GONE); 
    mWebView.layout(l, t, r, b); 
    mWebView.invalidate(); 
    mWebView.reload(); 
    mWebView.setVisibility(View.VISIBLE); 
} 

Auch dies löste mein Problem nicht. (Und nebenbei bemerkt ist dies eine Web-App mit einer einzelnen .html-Datei und JS bewirkt, dass sich der Status aller Elemente in der App zur Laufzeit ändert, daher ist das Neuladen keine Option.)

Mein Frage ist, ob jemand eine Art der Größenänderung eines WebView weiß, sobald der Inhalt geladen wurde, wenn die Tastatur sichtbar ist.

+0

Ich hatte dieses Problem noch nie zuvor. Mein Webview und sein Inhalt werden immer korrekt skaliert. Mit welchem ​​Gerät testeest du? Außerdem verwende ich "stateHidden | adjustResize" –

+0

Wow ... du hast Recht! Ich habe eine leere html-Seite mit einem 'fixed' positionierten div erstellt und die Größe wie erwartet geändert. Das Problem war, dass ich 'position: absolute;' wegen eines Fehlers in WebKit verwenden musste, der 'feste' Elemente dazu brachte, nicht auf'webkit-transform' zu reagieren, also muss ich einen anderen Weg finden. –

+0

Ich bin froh zu helfen.Im Allgemeinen habe ich festgestellt, dass die Verwendung von WebView zu fehlerhaft ist (insbesondere zwischen Geräten), und es wird vermieden, sie um jeden Preis zu verwenden. –

Antwort

2

Das Problem stellte sich heraus, dass ich position: absolute in einem position: fixeddiv verwendet habe. Die äußere div Größe wurde richtig geändert, aber die innere war nicht. Der Grund, warum ich position: absolute verwenden musste, war, weil es einen Fehler in WebKit gibt, was bedeutet, dass Sie transformfixed positionierte divs nicht können.

4

Das ist nicht genau die Antwort auf Ihre Frage, aber Sie werden auch feststellen, dass WebView die Größe ändert, wenn es größer wird, aber nicht reduziert, wenn die Höhe des Inhalts abnimmt, da ich bereits auf diese Frage geantwortet habe: WebView height = wrap_content with changing font size doesn't work

Der Bug/Feature wird auf Googles Bugtracker verwiesen: https://code.google.com/p/android/issues/detail?id=18726

Bitte mich nicht verantwortlich machen, ich wollte nur, dass für weitere Probleme hinzuweisen Sie mit WebView begegnen könnte.

Verwandte Themen