【问题标题】:Webview goes back to page top after exit from Fullscreen video退出全屏视频后,Webview 返回页面顶部
【发布时间】:2020-05-08 09:33:04
【问题描述】:

在我全屏关闭视频后,我希望 webview 显示它的最后位置,即在进入全屏模式之前。 现在它会转到页面顶部,我必须再次向下滚动才能找到视频。 这是我的代码:

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);
}

我不明白为什么退出全屏后 webview 又回到顶部。 请帮我解决这个问题。

【问题讨论】:

    标签: android video webview fullscreen


    【解决方案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 方法下添加此代码。

    你已经完成了编码运行它,它会正确显示位置。

    【讨论】:

      猜你喜欢
      • 2019-09-06
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-18
      • 2018-02-15
      相关资源
      最近更新 更多