Webview возвращается к началу страницы после выхода из полноэкранного видео - PullRequest
0 голосов
/ 08 мая 2020

После того, как я закрою видео в полноэкранном режиме, я хочу, чтобы веб-просмотр показывал его последнюю позицию, т.е. перед переходом в полноэкранный режим. Прямо сейчас он идет вверху страницы, и мне нужно снова прокрутить вниз, чтобы найти видео. вот мой код:

private class ChromeClient extends WebChromeClient {
    private View mCustomView;
    private WebChromeClient.CustomViewCallback mCustomViewCallback;
    private int mOriginalOrientation;
    private int mOriginalSystemUiVisibility;

    ChromeClient() {}


    public Bitmap getDefaultVideoPoster()
    {
        if (mCustomView == null) {
            return null;
        }

        return BitmapFactory.decodeResource(getApplicationContext().getResources(), 2130837573);
    }

    public void onHideCustomView()
    {
        ((FrameLayout)getWindow().getDecorView()).removeView(this.mCustomView);
        this.mCustomView = null;
       getWindow().getDecorView().setSystemUiVisibility(this.mOriginalSystemUiVisibility);
        setRequestedOrientation(this.mOriginalOrientation);
        this.mCustomViewCallback.onCustomViewHidden();
        this.mCustomViewCallback = null;

    }


    public void onShowCustomView(View paramView, WebChromeClient.CustomViewCallback paramCustomViewCallback)
    {

        if (this.mCustomView != null) {
            onHideCustomView();
            return;
        }


        this.mCustomView = paramView;
        this.mOriginalSystemUiVisibility = getWindow().getDecorView().getSystemUiVisibility();
        this.mOriginalOrientation = getRequestedOrientation();
        this.mCustomViewCallback = paramCustomViewCallback;
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

       ((FrameLayout)getWindow().getDecorView()).addView(this.mCustomView, new FrameLayout.LayoutParams(-1, -1));
       getWindow().getDecorView().setSystemUiVisibility(3846 | SYSTEM_UI_FLAG_LAYOUT_STABLE);

    }
}

@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
}

@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
    super.onSaveInstanceState(outState);
    webview.saveState(outState);
}

@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    webview.restoreState(savedInstanceState);
}

Я не могу понять, почему веб-просмотр снова возвращается в начало после выхода из полноэкранного режима. Пожалуйста, помогите мне это исправить.

1 Ответ

0 голосов
/ 29 июня 2020

Привет, я думаю, что приведенному выше коду нужна только какая-то строка кода, чтобы исправить это

Шаг 1

Объявите переменную в вашем ChromeClient классе.

int positionY;

Шаг 2

Теперь сохраните положение прокрутки перед переходом в полноэкранный режим.

positionY = webView.getScrollY();

здесь, я вижу, что вы собираетесь в полноэкранный режим по методу onShowCustomView, поэтому добавьте эту строку в этот метод.

Шаг 3

Теперь восстановите прокрутку позиция после возврата из полноэкранного режима.

webView.postDelayed(new Runnable() {
                @Override
                public void run() {
                    webView.scrollTo(0, positionY);
                }
                // Delay the scrollTo to make it work
            }, 300);

добавьте этот код в свой метод onHideCustomView.

Вот и все, вы закончили с кодированием, запустите его, и он покажет положение правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...