我在 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。有什么办法可以解决这个问题吗?
WebView
是一个沉重的组件,在您尝试获取其宽度和高度之前,它可能尚未完全呈现在屏幕上。
一个简单的解决方法是将
WebView
放入另一个容器中,最好是 FrameLayout
并获取 FrameLayout
的尺寸。
WebView
的尺寸总是等于 Framelayout
的尺寸,只要它是唯一的孩子并且它的宽度和高度都设置为 match_parent
您需要 WebView CONTENTS 的width 和height,after 加载component。 是的,你这样做了,但是没有 getContentWidth 方法(只有一个视口值), 并且 getContentHeight() 是不准确!
答案:子类WebView:
/*乔恩·古德温 */ 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 //=========