在 Android 中获取动态创建的 WebView 的尺寸

问题描述 投票:0回答:2

我在 android 的 webView 中嵌入了一个 flash 媒体播放器,我需要获取 webView 的尺寸来设置媒体播放器以匹配。如果我在调用中硬编码播放器的像素尺寸,它会起作用,但我希望它根据 webView 的尺寸进行调整,它使用 android:width=fill_parent 和 android:height=wrap_content,并根据屏幕方向。

根据我的阅读,我尝试等待 onCreate() 完成并在 onStart() 和 onResume() 方法中调用 getHeight() 和 getWidth(),但它们仍然返回 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);
}

出于某种原因,无论是在 onCreate()、onStart() 还是 onResume() 中调用方法,我的高度和宽度总是为 0。有什么办法可以解决这个问题吗?

android webview size height width
2个回答
0
投票

WebView
是一个沉重的组件,在您尝试获取其宽度和高度之前,它可能尚未完全呈现在屏幕上。

一个简单的解决方法是将

WebView
放入另一个容器中,最好是
FrameLayout
并获取
FrameLayout
的尺寸。

WebView
的尺寸总是等于
Framelayout
的尺寸,只要它是唯一的孩子并且它的宽度和高度都设置为
match_parent


0
投票

您需要 WebView CONTENTSwidthheightafter 加载component。 是的,你这样做了,但是没有 getContentWidth 方法(只有一个视口值), 并且 getContentHeight() 是不准确

答案:子类WebView:

  1. /*乔恩·古德温 */ package com.example.html2pdf;//你的包

    导入android.content.Context;导入 android.util.AttributeSet; 导入 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 //=========
    
© www.soinside.com 2019 - 2024. All rights reserved.