Je veux déterminer la largeur et la hauteur du mais le journal résultant les montre toujours à 0. p> p> webview code>. Je l'ai déjà essayé en utilisant:
12 Réponses :
hmmm - j'ai parcouru la source WEVVIEW et je peux voir qu'à l'intérieur de l'intérieur, ils utilisent la vue # GetWidth and View # GetHeight Voici l'un des méthodes privées Comme indiqué dans les commentaires, vous devez vous assurer que vous devez la mesurer après avoir attribué la mise en page d'activité, par exemple webview code> S:
setContentView (r.layout.mylayout); code> p> p>
Vous recherchiez probablement les tailles trop tôt, probablement dans le Oncreate code>. Au lieu de cela, essayez ceci:
Le Onpagefini code> L'approche de rappel ne fonctionne pas lors de l'utilisation de
LOADDATA CODE> ou
LOADDATAWITHBASEURL CODE>. J'ai vu une autre solution sur andromedev en utilisant JavaScript, mais je ne suis pas convaincu que c'est la meilleure voie à suivre. P>
Si vous voulez obtenir la hauteur et la largeur de temps de chargement, vous ne pouvez pas l'obtenir car la durée de charge ne peut pas l'obtenir. Je suggère d'utiliser le webview Touchevent et obtenez la hauteur et la largeur. Sinon, utilisez une autre vue Cliquez sur l'événement et obtenez la hauteur et la largeur.
webView.getWidth(); webView.getHeight();
Vous vérifiez Taille de WebView trop tôt. Vous pouvez essayer cela dans la méthode suivante
@Override public void onWindowFocusChanged(boolean hasFocus) { // TODO Auto-generated method stub super.onWindowFocusChanged(hasFocus); webView.getWidth(); webView.getHeight(); }
Pour quelqu'un d'autre qui lutt toujours. Utilisez ces méthodes pour obtenir la hauteur et la largeur de votre webview.
computeHorizontalScrollRange(); -> for width computeVerticalScrollRange(); -> for height
Notez que celles-ci peuvent renvoyer des valeurs différentes à GetWidth () et GetHeight () car ils renvoient toute la largeur / hauteur défilée plutôt que la largeur / hauteur réelle de la vue WebView à l'écran.
Notez également que ces méthodes sont protégées et que vous pourriez avoir du mal à les utiliser à partir de votre présentation personnalisée, par exemple.
Voici une solution plus élégante
J'ai eu le même problème. Je viens de mettre public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
initWebView();
}
private void initWebView(){
if(isOnline()){
venueWebView = (WebView) findViewById(R.id.venueWebView);
String url = "some url";
int viewWight = venueWebView.getWidth();
int viewHeight = venueWebView.getHeight();
venueWebView.loadUrl(url);
}
J'espère que ma réponse aide quelqu'un.
Si vous souhaitez obtenir une hauteur de webview code> après le chargement de contenu, cela pourrait être utile. P>
ViewTreeObserver viewTreeObserver = mWebView.getViewTreeObserver();
viewTreeObserver.addOnPreDrawListener(new OnPreDrawListener() {
@Override
public boolean onPreDraw() {
int height = mWebView.getMeasuredHeight();
if( height != 0 ){
Toast.makeText(getActivity(),"height:"+height,Toast.LENGTH_SHORT).show();
mWebView.getViewTreeObserver().removeOnPreDrawListener(this);
}
return false;
}
});
Vous avez besoin de la largeur et de la hauteur du contenu WEBVIEW, après avoir chargé votre HTML. Oui vous faites, mais il n'y a pas de méthode getContentWidth (seulement une valeur de port de vue), Et le getContentHeighight () est inexact!
Réponse: Sous-classe Webview: P>
/* Jon Goodwin */ package com.example.html2pdf;//your package import android.content.Context; import android.util.AttributeSet; import android.webkit.WebView; class CustomWebView extends WebView { public int rawContentWidth = 0; //unneeded public int rawContentHeight = 0; //unneeded Context mContext = null; //unneeded public CustomWebView(Context context) //unused constructor { super(context); mContext = this.getContext(); } public CustomWebView(Context context, AttributeSet attrs) //inflate constructor { super(context,attrs); mContext = context; } public int getContentWidth() { int ret = super.computeHorizontalScrollRange();//working after load of page rawContentWidth = ret; return ret; } public int getContentHeight() { int ret = super.computeVerticalScrollRange(); //working after load of page rawContentHeight = ret; return ret; } //========= }//class //=========
J'ai utilisé un travail autour, au lieu d'aller chercher de WebView get d'affichage d'affichage, en supposant que vous disposez de la largeur de WebView presque égale à la taille de l'écran téléphonique et à la hauteur presque égale à la hauteur de l'écran de téléphone.
DisplayMetrics displayMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); int height = (int) displayMetrics.heightPixels*0.9; int width = displayMetrics.widthPixels;
Si vous souhaitez obtenir la hauteur d'origine après le chargement du contenu, vous pouvez utiliser le code ci-dessous. Bien que le code soit obsolète, cela fonctionne parfaitement.
Pouvez-vous envoyer votre code? N'oubliez pas que vous ne pouvez pas obtenir la largeur et la hauteur d'une vue dans la méthode Oncreate, car la mise en page ne s'est pas encore produite.
Je mets mon code est ici hauteur = mainwebview.getheight (); System.err.println ("Afficher la hauteur totale ->" + mainwebview.getheight ()); System.err.println ("Hauteur de mesure ->" + MAINWEBVIEW.GETMASEDHEIGHTS ());