прокрутка работает в обратном порядке в WebView - PullRequest
0 голосов
/ 15 февраля 2019

Я использовал WebView в своем приложении, и он видит, что прокрутка не работает должным образом, когда я пытаюсь прокрутить страницу вниз, она не опускается, и происходит обратное, но когда я пытаюсь коснуться экрана и выйти обратно"touch with scroll up" Это работает !!, больше разъяснений на этих изображениях gif1 , gif2

код

public class VisitSiteFragment extends android.app.Fragment {

private View view;
private ProgressBar webViewProgressBar;
private WebView webView;
String url;


public VisitSiteFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    view = inflater.inflate(R.layout.fragment_visit_site, container, false);
    if (getArguments() != null) {
        url = this.getArguments().getString("url");
        Log.e("URL", url);
    }
    webViewProgressBar = (ProgressBar) view.findViewById(R.id.webViewProgressBar);
    webView = (WebView) view.findViewById(R.id.webView);

    webView.setVisibility(View.VISIBLE);
    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setSupportZoom(true);
    webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    webSettings.setUseWideViewPort(true);


    webView.setWebChromeClient(new WebChromeClient() {
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            webViewProgressBar.setProgress(newProgress);
            super.onProgressChanged(view, newProgress);
        }
    });
    webView.setWebViewClient(new WebViewClient() {


        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            webViewProgressBar.setVisibility(View.VISIBLE);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            webViewProgressBar.setVisibility(View.GONE);
            webView.setVisibility(View.VISIBLE);
        }

    });

    webView.loadUrl(url);

    return view;

}

}

XML

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".VisitSiteFragment"
    android:orientation="vertical"
    android:background="@color/white"
    >

    <ProgressBar
        android:id="@+id/webViewProgressBar"
        android:layout_width="match_parent"
        android:layout_height="8dp"
        style="@style/Widget.AppCompat.ProgressBar.Horizontal"
        android:theme="@style/progressBarBlue"
        android:layout_gravity="top"
        android:layout_marginTop="-3dp"
        android:progress="20"
        />

    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >

    </WebView>

</LinearLayout>

Я видел, как кто-то спрашивал об этой проблеме здесь , но ответ на этот вопрос не помог

1 Ответ

0 голосов
/ 18 февраля 2019

После многих попыток настройки WebView я решил проблему, отключив прокрутку, встроенную в WebView, как описано в этом ответе , и использовал вместо нее ScrollView

Код после редактирования

webView = (WebView) view.findViewById(R.id.webView);

    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setSupportZoom(true);
    webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    webSettings.setUseWideViewPort(true);

    webView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return (event.getAction() == MotionEvent.ACTION_MOVE);
        }
    });

    webView.setScrollContainer(false);


    webView.setWebChromeClient(new WebChromeClient() {
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            webViewProgressBar.setProgress(newProgress);
            super.onProgressChanged(view, newProgress);
        }
    });
    webView.setWebViewClient(new WebViewClient() {


        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            webViewProgressBar.setVisibility(View.VISIBLE);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            webViewProgressBar.setVisibility(View.GONE);
            webView.setVisibility(View.VISIBLE);
        }

    });
...