Получение размеров динамически созданного WebView в Android - PullRequest
0 голосов
/ 29 октября 2011

Я встраиваю флеш-медиаплеер в webView в Android, и мне нужно получить размеры webView, чтобы настроить медиаплеер для соответствия.Если я жестко закодирую размеры в пикселях проигрывателя в вызове, он работает, но я хочу, чтобы он корректировался в зависимости от размеров веб-представления, в котором используются android: width = fill_parent и android: height = wrap_content, и изменяется в зависимости оториентация экрана.

Из того, что я прочитал, я пытался дождаться завершения onCreate () и вызвать getHeight () и getWidth () в методах onStart () и onResume (), но они оба по-прежнему возвращают 0Вот метод, который я вызываю в onStart ()

private void playVideo(String path){
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setAllowFileAccess(true);
    webView.getSettings().setPluginsEnabled(true);
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
    int videoHeight = webView.getHeight();
    int videoWidth = webView.getWidth();
    webView.loadUrl("*my url here*?video="+path+
    ".mp4&width="+videoWidth+"&height="+videoHeight);
}

. По какой-то причине я всегда получаю 0 в качестве высоты и ширины, независимо от того, вызываю ли я метод в onCreate (), onStart () или onResume ().Любые идеи, как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 25 июля 2016

Вам нужны ширина и высота WebView СОДЕРЖАНИЕ , после , когда вы загрузили компонент .Да, вы делаете, но нет getContentWidth метода (только значение порта просмотра), И getContentHeight () имеет значение неточно !

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

  1. / * Джон Гудвин * / пакет com.example.html2pdf; // ваш пакет

    import android.content.Context;import android.util.AttributeSet;import android.webkit.WebView;

    Класс CustomWebView расширяет WebView {public int rawContentWidth = 0;// ненужный public int rawContentHeight = 0;// ненужный контекст mContext = null;// ненужные

    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 голосов
/ 29 октября 2011

WebView является тяжелым компонентом, и возможно, что он не был полностью отрисован на экране до того, как вы попытались получить его ширину и высоту.

Простой обходной путь будет включать помещение WebView в другой контейнер, предпочтительно FrameLayout и получение размеров FrameLayout.

Размеры WebView всегда будут равны размерам Framelayout, если это единственный дочерний элемент, а его ширина и высота установлены на match_parent

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...