の幅と高さを決めたいですWebView
。私はすでにそれを使用して試しました:
webView.getWidth();
webView.getHeight();
しかし、結果のログは常にそれらが 0 であることを示しています。
の幅と高さを決めたいですWebView
。私はすでにそれを使用して試しました:
webView.getWidth();
webView.getHeight();
しかし、結果のログは常にそれらが 0 であることを示しています。
サイズを確認するのが早すぎた可能性があり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(););
}
});
またはを使用する場合、onPageFinished
コールバック アプローチは機能しません。Andromedevで JavaScript を使用した別の解決策を見ましたが、これが最適な方法であるとは確信していません。loadData
loadDataWithBaseURL
HTML を読み込んだ後、WebView CONTENTS の幅と高さが必要です。はい、そうですが、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
//=========
うーん - WevView のソースを調べたところ、内部で View#getWidth と View#getHeight を使用していることがわかります。これは、WebView
プライベート メソッドの 1 つです。
/*
* 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);
webview のサイズをチェックするのが早すぎます。次の方法でこれを試すことができます
@Override
public void onWindowFocusChanged(boolean hasFocus) {
// TODO Auto-generated method stub
super.onWindowFocusChanged(hasFocus);
webView.getWidth();
webView.getHeight();
}
私の答えが誰かに役立つことを願っています。
コンテンツが読み込まれた後の高さを取得したい場合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);
}
高さと幅の読み込み時間を取得したい場合は、読み込み時間が取得できないため、取得できません。webview Touchevent を使用して、高さと幅を取得することをお勧めします。それ以外の場合は、別のビュー クリック イベントを使用して、高さと幅を取得します。
webView.getWidth();
webView.getHeight();
これを使って。