I have a RelativeLayout
with WebView
. I am loading some generated html text into that WebView
. After loading the data WebView
height exceeding the screen. Now I need the height of the entire WebView
. Till now I tried WebView#getHeight()
, WebView#getBottom()
but I'm getting the height of visible content.
Finally I got the answer for my question. Here is the answer.
After loading WebView
we will get call in WebViewClient#onPageFinished
there we need to call javascript to get the height of full content of WebView
WebViewClient
class
/**
* 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)");
}
}
}
After that we will get callback with height in WebInterface
class which is Registered as 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
}
}
WebViewClient.onPageFinished()
only gets called when the page had finished loading, this solution falls short when the size of the content changes post loading (e.g. Javascript content rendered after page finished loading, user interactions with expandable and collapsible sections) –
Dole Wrap your WebView
within a ScrollView
and webView.getHeight()
will return the height of the actual WebView content. Make sure your WebView
's height attribute is set to 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>
kotlin: myWebView.contentHeight
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 has protected method computeVerticalScrollRange()
. you can access this method by creating custom one.
((CustomWebView) webView).getContentHeight())
compute
tends to indicate that some work is being done, possibly heavy. –
Beak ClassCastException
with this solution. Any work arounds? –
Periotic In your Java class add the 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);
}
My Answer:-
I think you have to remove padding properties from your layout.xml file
(i.e) Remove the following content from your XML file and try it.
android:paddingBottom
android:paddingLeft
android:paddingRight
android:paddingTop
Hope it helps!!
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();
}
check this link! for more information
Actual height in Kotlin: myWebView.contentHeight * Resources.getSystem().displayMetrics.density
© 2022 - 2025 — McMap. All rights reserved.