如何在 Android 中隐藏 WebView 播放器的视频选项

Posted

技术标签:

【中文标题】如何在 Android 中隐藏 WebView 播放器的视频选项【英文标题】:How I Can hide the video option from WebView player in Android 【发布时间】:2021-02-05 09:46:00 【问题描述】:

我试图使用 WebView 从 URL 显示视频,它运行良好,但我想隐藏用于在网络中下载视频的视频选项

enter image description here

这是我使用的代码

  web_view.setWebChromeClient(new ChromeClient(activity) 
            @Override
            public void onProgressChanged(WebView view, int newProgress) 
                super.onProgressChanged(view, newProgress);

            

        );


        WebSettings webSettings = web_view.getSettings();
        webSettings.setjavascriptEnabled(true);
        webSettings.setAllowFileAccess(true);
        webSettings.setAppCacheEnabled(true);

        web_view.loadUrl(data.get(position).getVideo());

而我使用的 ChromeClinet 类是:

 private class ChromeClient extends WebChromeClient 
        private View mCustomView;
        private WebChromeClient.CustomViewCallback mCustomViewCallback;
        protected FrameLayout mFullscreenContainer;
        private int mOriginalOrientation;
        private int mOriginalSystemUiVisibility;

        Activity activity;


        ChromeClient(Activity activity) 
            super();
            this.activity = activity;
        

        public Bitmap getDefaultVideoPoster() 
            if (mCustomView == null) 
                return null;
            
            return BitmapFactory.decodeResource(getApplicationContext().getResources(), 2130837573);
        

        public void onHideCustomView() 
            ((FrameLayout) activity.getWindow().getDecorView()).removeView(this.mCustomView);
            this.mCustomView = null;
            activity.getWindow().getDecorView().setSystemUiVisibility(this.mOriginalSystemUiVisibility);
            activity.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 = activity.getWindow().getDecorView().getSystemUiVisibility();
            this.mOriginalOrientation = activity.getRequestedOrientation();
            this.mCustomViewCallback = paramCustomViewCallback;
            ((FrameLayout) activity.getWindow().getDecorView()).addView(this.mCustomView, new FrameLayout.LayoutParams(-1, -1));
            activity.getWindow().getDecorView().setSystemUiVisibility(getScreenResolution() | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
        

        private int getScreenResolution() 
            WindowManager wm = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
            Display display = wm.getDefaultDisplay();
            DisplayMetrics metrics = new DisplayMetrics();
            display.getMetrics(metrics);
            int width = metrics.widthPixels;
            int height = metrics.heightPixels;

            return height;
        


    

如何从网络上播放此视频,或者是否可以创建自定义播放器

【问题讨论】:

【参考方案1】:

简短回答: 在您的页面作为 javascript 加载到 webview 后注入 document.getElementById("video_id-in_webpage").removeAttribute("controls")

长答案:

您似乎正在 webView 中加载外部 url:web_view.loadUrl(data.get(position).getVideo());

我认为这实际上与网页设计有关,而不是 android。 如果您是网站开发人员,或者您可以在 web 端(不是 android)向他们询问以下解决方案,可能会解决您的问题。

html5 video - show/hide controls programmatically

HTML5 Video // Completely Hide Controls

但是,如果您想在 android 端执行此操作,则可以在页面完全加载后向 Web 视图注入一些 CSS 或 javascript 代码,以隐藏 html video 标记上的控制器。您可以在上面的链接中找到要注入的代码。 怎么注射?!这个问题在***中也得到了回答 Inject javascript file to my site with webview in android 或 inject CSS to a site with webview in android 。

public void onProgressChanged(WebView view, int newProgress) 
                super.onProgressChanged(view, newProgress);
    // here you can detect if page has loaded or not to inject javascript 
view.loadUrl("javascript: document.getElementById('video_id_in_webpage').removeAttribute('controls');"
            

【讨论】:

用户点击视频选项时如何设置监听器? 或者,如果您从 URL 知道好的视频播放器可以在 android 中使用回收站视图 @Mohammad Sallout 用于创建侦听器,您可以在 android 中创建一个 javascript 接口并连接它们。如果您有视频的 url,我认为 VideoView 比 WebView 更好。

以上是关于如何在 Android 中隐藏 WebView 播放器的视频选项的主要内容,如果未能解决你的问题,请参考以下文章

如何从 webview 隐藏文本选择句柄:android

Android中WebView中的文本字段被键盘隐藏

在失焦时隐藏文本选择句柄:Android -Webview

在 Android WebView 中隐藏 HTML 元素?

Android webview中隐藏在键盘下方的文本框

最佳实践Android设计:隐藏的webview、fragment、service?