Как получить ширину и высоту веб-просмотра в Android - PullRequest
8 голосов
/ 23 октября 2009

Я хочу определить ширину и высоту WebView. Я уже пробовал это с помощью:

webView.getWidth();
webView.getHeight();

но в полученном журнале они всегда равны 0.

Ответы [ 11 ]

3 голосов
/ 20 марта 2014

Вот более элегантное решение

public void onCreate(Bundle savedInstanceState) {


        webView = (WebView) findViewById(R.id.webView1);

        webView.addOnLayoutChangeListener(new OnLayoutChangeListener() {

            @Override
            public void onLayoutChange(View v, int left, int top, int right,int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
                 int w= webView.getWidth();
                 int h= webView.getHeight();


            }
        });



    }   
2 голосов
/ 16 августа 2013

Для всех, кто еще борется. Используйте эти методы, чтобы получить высоту и ширину вашего веб-просмотра.

computeHorizontalScrollRange(); -> for width 
computeVerticalScrollRange(); -> for height
2 голосов
/ 24 апреля 2012

Подход onPageFinished обратного вызова не работает при использовании loadData или loadDataWithBaseURL. Я видел другое решение для Andromedev с использованием JavaScript, но я не уверен, что это лучший путь.

1 голос
/ 31 июля 2013

вы слишком рано проверяете размер веб-просмотра. Вы можете попробовать это следующим способом

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    // TODO Auto-generated method stub
    super.onWindowFocusChanged(hasFocus);
            webView.getWidth();
            webView.getHeight();
}
1 голос
/ 19 декабря 2010

Возможно, вы слишком скоро проверяли размеры, скорее всего, в onCreate. Вместо этого попробуйте это:

webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView webView, String url) {
                super.onPageFinished(webView, url);
                Log.i(TAG, findViewById(R.id.my_component).getWidth(););
            }
        });
1 голос
/ 23 октября 2009

Хммм. Я просмотрел источник WevView и вижу, что внутри они используют View # getWidth и View # getHeight. Вот один из частных методов WebView:

/*
 * Return the width of the view where the content of WebView should render
 * to.
 */
private int getViewWidth() {
    if (!isVerticalScrollBarEnabled() || mOverlayVerticalScrollbar) {
        return getWidth();
    } else {
        return getWidth() - getVerticalScrollbarWidth();
    }
}

Как отмечается в комментариях, вы должны убедиться, что измеряете его после того, как назначите макет деятельности, например. setContentView(R.layout.mylayout);

0 голосов
/ 05 января 2019

Я использовал обходной путь, вместо извлечения из ненадежного веб-просмотра, полученного от DisplayMetrics, предполагая, что ширина веб-просмотра почти равна размеру экрана телефона, а высота почти равна высоте экрана телефона.

DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = (int) displayMetrics.heightPixels*0.9;
int width = displayMetrics.widthPixels;
0 голосов
/ 24 июля 2016

Вам понадобится ширина и высота содержимого WebView после загрузки HTML. ДА вы делаете, но нет метода getContentWidth (только значение порта просмотра), И getContentHeight () является неточным!

Ответ: подкласс WebView:

/*
  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
//=========
0 голосов
/ 21 марта 2015

Надеюсь, мой ответ кому-нибудь поможет.

Если вы хотите получить высоту webview после загрузки контента, это может быть полезно.

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;
               }
       });
0 голосов
/ 14 ноября 2014

У меня была такая же проблема. Я просто поместил initWebView метод в onWindowFocusChangedt .

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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...