I'm trying to use scrollTo method of webview. This my layout file for the webview.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<WebView
android:id="@+id/webMap"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
What I'm trying to do is showing a html file (which has only a map image) and scrolling to certain area on image with :
mapWebView.loadUrl("file:///android_asset/maps/map.html");
mapWebView.scrollTo(300, 300);
But when the webview is loaded it always shows the (0, 0) of the image.
What is the problem with scrollTo()
here?
The Android system webview custom cache file has been deprecated and removed in Android 13. New apps and any app updates will now use the operating system default cache location.
Create two Android layout files – “res/layout/main. xml” and “res/layout/webview. xml“. Two activity classes, an activity to display a button, another activity display the WebView with predefined URL.
Android System WebView lets applications display browser windows in an app instead of transporting the user to another browser. Android developers use WebView when they want to display webpages in a Google app or other application.
MyViewClient myViewClient = new MyViewClient();
// Обработка переворачивания экрана и начальная инициализация выбранной темы (ID_TOPIC) в приложении
if (savedInstanceState != null) {
// Вторичное создание окна после переворачивания экрана
scrollTopic = savedInstanceState.getFloat(SCROOL_TOPIC, 0);
} else {
// Первый запуск программы до переворачивания экрана
// Чтение данных с настроек программы
scrollTopic = sPref.getFloat(SCROOL_TOPIC, 0);
}
webView.setWebViewClient(myViewClient);
// Сохранение данных в буфер при переворачивании экрана
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putFloat(SCROOL_TOPIC, getScrollWebView()); // Сохраняем вертикальную прокрутку
super.onSaveInstanceState(savedInstanceState);
}
// Метод при закрытии окна
@Override
protected void onStop() {
super.onStop();
// Сохранение настроек программы в файл настроек
SharedPreferences.Editor ed = sPref.edit();
ed.putFloat(SCROOL_TOPIC, getScrollWebView());
ed.apply();
}
// Класс собственного загрузчика html
public class MyViewClient extends WebViewClient {
// Переопределение метода окончания загрузки страницы
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
setScrolling();
}
}
// Установка нужной прокрутки в нашем webView
private void setScrolling() {
final WebView newView = webView;
try {
if (scrollTopic > 0) {
newView.postDelayed(new Runnable() {
public void run() {
if (newView.getProgress() >= 100) {
newView.postDelayed(new Runnable() {
public void run() {
newView.scrollTo(0, (int) getScrollingFromPercentage());
scrollTopic = 0;
}
}, 10);
} else {
newView.post(this);
}
}
}, 1000);
}
} catch (Exception ignored) {
}
}
// Определение процента прокрутки (без умножения на 100)
private float getScrollWebView() {
return (float) (webView.getScrollY() - webView.getTop()) / webView.getContentHeight();
}
// Определение прокрутки по проценту (без деления на 100)
private float getScrollingFromPercentage() {
return webView.getTop() + scrollTopic * webView.getContentHeight();
}
Try this..:
try {
webview.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view,
int newProgress) {
if (newProgress >= 100) {
webview.scrollTo(x,y);
}
super.onProgressChanged(view, newProgress);
};
});
} catch (Exception e) {
e.printStackTrace();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With