如何获得android WebView的全部高度?

时间:2017-04-13 14:08:29

标签: android webview

我有RelativeLayout WebView。我正在将一些生成的html文本加载到WebView中。加载超过屏幕的数据WebView高度后。现在我需要整个WebView的高度。直到现在我尝试了WebView#getHeight()WebView#getBottom(),但我得到了可见内容的高度。

如何获得WebView的总高度。? screen height

6 个答案:

答案 0 :(得分:7)

最后我得到了我的问题的答案。这是答案。

加载WebView后,我们会在WebViewClient#onPageFinished接听电话,我们需要调用javascript才能获得WebView

的完整内容的高度

WebViewClient上课

/**
 * Custom web client to perform operations on WebView
 */
class WebClient extends WebViewClient {

    @Override
    public void onPageFinished(WebView view, String url) {
            view.loadUrl("javascript:AndroidFunction.resize(document.body.scrollHeight)");
        }
    }
}

之后我们将在WebInterface类中获得高度回调,该类已注册为JavascriptInterface

/**
 * WebView interface to communicate with Javascript
 */
public class WebAppInterface {

    @JavascriptInterface
    public void resize(final float height) {
        float webViewHeight = (height * getResources().getDisplayMetrics().density);
        //webViewHeight is the actual height of the WebView in pixels as per device screen density
    }
}

答案 1 :(得分:2)

WebView换成ScrollViewwebView.getHeight()将返回实际WebView内容的高度。确保WebView的高度属性设置为wrap_content

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <WebView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </WebView>
</ScrollView>

答案 2 :(得分:1)

public class CustomWebView extends WebView{
    public CustomWebView(Context context) {
        super(context);
    }
    int ContentHeight = 0;
    public int getContentHeight(){
        if(ContentHeight==0)
            ContentHeight = computeVerticalScrollRange();
        return ContentHeight;
    }
}

Webview已保护方法computeVerticalScrollRange()。您可以通过创建自定义方法来访问此方法。

((CustomWebView) webView).getContentHeight())

答案 3 :(得分:0)

在Java类中添加getWindow()

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_webview);
}

答案 4 :(得分:0)

我的答案: -

我认为您必须从layout.xml文件中删除填充属性

(即)从XML文件中删除以下内容并进行尝试。

android:paddingBottom    
android:paddingLeft    
android:paddingRight    
android:paddingTop

希望它有所帮助!!

答案 5 :(得分:0)

private int getScale(){
    Display display = ((WindowManager) 
    getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
    int width = display.getWidth(); 
    Double val = new Double(width)/new Double(PIC_WIDTH);
    val = val * 100d;
    return val.intValue();
}

检查 link!了解更多信息