我想确定WebView
的宽度和高度。我已经尝试使用以下方法:
webView.getWidth();
webView.getHeight();
但是生成的日志始终显示它们为0。
我想确定WebView
的宽度和高度。我已经尝试使用以下方法:
webView.getWidth();
webView.getHeight();
但是生成的日志始终显示它们为0。
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();
}
});
}
你可能在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(););
}
});
对于其他仍然存在困难的人。 使用以下方法获取您的 webview 的高度和宽度。
computeHorizontalScrollRange(); -> for width
computeVerticalScrollRange(); -> for height
onPageFinished
回调方法在使用 loadData
或 loadDataWithBaseURL
时无效。我在 Andromedev 上看到了另一种使用 JavaScript 的解决方案,但我不确定这是否是最佳选择。
在加载HTML后,您需要WebView内容的宽度和高度。
确实需要,但是没有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
//=========
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);
@Override
public void onWindowFocusChanged(boolean hasFocus) {
// TODO Auto-generated method stub
super.onWindowFocusChanged(hasFocus);
webView.getWidth();
webView.getHeight();
}
我使用了一个解决方法,不是从不可靠的webview获取数据,而是从DisplayMetrics获取数据,假设您的webview宽度几乎等于手机屏幕大小,高度几乎等于手机屏幕大小的高度。
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = (int) displayMetrics.heightPixels*0.9;
int width = displayMetrics.widthPixels;
我希望我的回答能够帮助到某些人。
如果你想在内容加载后获取 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;
}
});
我曾经有过同样的问题。我只是把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);
}