Comment redimensionner une webview android après l'ajout de données
Dans une mise en page (linéaire, verticale) de la hiérarchie, j'ai plusieurs points de vue et l'un d'eux est une WebView.
Ils ont tous les mêmes paramètres:
android:layout_width="fill_parent"
android:layout_height="wrap_content"
Pour tous les points de vue, l'espacement entre les éléments est correctement géré, mais pour la Webview il y a beaucoup d'espaces après le texte affiché à l'intérieur.
J'ai mis le HTML () texte de la webview dans le "onCreate" méthode de l'activité à l'aide de la mise en page.
Est-il un moyen de laisser la webview redimensionner lui-même, pour correspondre à son contenu taille?
Par la manière, l'espace de gauche varier d'un appareil à l'autre (émulateur vs Étape vs Hero)
Une idée? Grâce
- Jetez un oeil à [similar_problem_link][1] [1]: stackoverflow.com/a/15687522/1228514
Vous devez vous connecter pour publier un commentaire.
Je suis sûr que c'est trop tard, mais l'ajout de la méthode qui a fonctionné pour moi dans le cas où quelqu'un d'autre vient ici à la recherche d'une solution.
Une fois le chargement de la page terminé, je suis d'injecter une méthode javascript pour rappel me JS crochet. Et dans cette méthode, je suis passant à la taille de .
La solution peut également être vu ici.
WebView
hauteur et vous essayez de l'ensemble de cette plus grande valeur de la hauteur pourLayoutParams
- votreWebView
sera pour disparaître à tous.Il semble qu'au moment de la Webview seulement redimensionne si le contenu est trop grand. Si la webview est plus grande que le contenu qu'il n'est pas réduit à récupérer l'espace.
J'ai eu le même problème. J'ai résolu en changeant la visibilité de la WebView.
Après quelques heures de recherches et d'essayer, j'ai trouvé la plus simple solution de travail. Appelez simplement ce que "repeindre":
Pour mon webview, il fonctionne parfaitement à l'intérieur d'un scrollView.
Si vous ne souhaitez pas utiliser WRAP_CONTENT, vous pouvez utiliser vos propres paramètres.
J'ai trouvé:
(1) il y a deux hauteur dans webview. MeasureHeight et contentHeight. Notez que le contentHeight est calculé à partir de la webcoreThread. Les deux de hauteur ne sont pas uniformes à tout moment!
(2) lors de la mise en page finale.la webview recharger le contenu. Le contentHeight est compatible avec measureHeight.
Je pense donc qu'une solution: faire webview recharger le contenu une fois le tracé terminé.
Ma solution:
(1)s'étend webview .
(2)remplacer onlayout(),dispatchDraw(),
(3) webview besoin init avant de charger tous les le contenu.
Espère que cette aide.
J'ai aussi eu le problème de la WebView pas de taille ajustement après ajustement de la taille du texte via javascript. J'ai résolu ce problème en définissant la visibilité de la WebView à Vue.ALLÉ jusqu'à onPageFinished(). Après le chargement de la page et je ajuster la taille de police etc via javascript, setVisibility(View.VISIBLE) et la WebView tailles pour s'adapter parfaitement.
Si vous retirez simplement la vue, puis en ajouter un nouveau en arrière, le problème est résolu.
Voici un exemple:
En résumé... ça ajoute un nouveau WebView tout comme l'ancien droit de retour à son parent de même indice.
J'ai eu le même problème avec FrameLayout contenant TextView, ProgressBar et WebView. Dépend de l'objet de retour à partir du serveur je me cachais points de vue et parfois, quand j'ai eu à montrer une page web et de cacher TextView et ProgressBar dans onPageFinished() WebView a une hauteur de la ProgressBar. Corrigé par ce morceau de code:
J'ai seulement mis la webview à l'intérieur de la ScrollView et définir layout_height=wrap_content et cela a fonctionné.
Et dans mon Activité
Vous pouvez mettre à jour périodiquement WebView la hauteur en fonction javascript hauteur du corps, comme ceci:
layout.xml:
P. S. Vérifié sur Android 5, 4.1, 4.04
D'accord avec @Fernwilter. Mais le changement de la séquence a fonctionné pour moi.
Il a travaillé pour moi.
Un peu compliqué, mais en travaillant ...
Une solution plus simple est de faire invalider la webview une fois le chargement fini:
webView.requestLayout();
aprèswebView.invalidate();
a fonctionné pour moi. Il est possible qu'une seule est nécessaire.