我知道这是一个古老的问题,它被问了很多次。但我尝试了很多解决方案,他们都不适合我。如何在全屏模式下播放视频并退出Android WebView的全屏模式?
我在华为6P和三星S7,Nexus 5, WebView中的视频(https://www.youtube-nocookie.com/embed/M68lNfqmTNk?rel=0&rel=0&showinfo=0)没有像预期的那样工作(它在去年工作过)。 当我点击全屏按钮时,会继续调用“onShowCustomView”和“onHideCustomView”。所以我可以看到视频闪烁(非全屏 - >全屏 - >非全屏)。 有时候,如果我很幸运,视频会进入全屏模式,但如果按全屏按钮退出全屏模式,该按钮根本不起作用。
我在GitHub写了一个demo,希望有人能帮助我。谢谢。
下面是代码
初始化网页视图:
mWebView = (WebView)findViewById(R.id.webview);
mWebChromeClient = new MyWebChromeClient();
mWebView.setWebChromeClient(mWebChromeClient);
mWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
mWebView.loadUrl(url);
return true;
}
});
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setUseWideViewPort(true);
webSettings.setAllowFileAccess(true);
webSettings.setSupportZoom(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
MyWebChromeClient:
public class MyWebChromeClient extends WebChromeClient {
FrameLayout.LayoutParams LayoutParameters = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
Log.d("youtube", "onShowCustomView");
// if a view already exists then immediately terminate the new one
if (mCustomView != null) {
callback.onCustomViewHidden();
return;
}
mContentView = (ConstraintLayout) findViewById(R.id.activity_main);
mContentView.setVisibility(View.GONE);
mCustomViewContainer = new FrameLayout(MainActivity.this);
mCustomViewContainer.setLayoutParams(LayoutParameters);
mCustomViewContainer.setBackgroundResource(android.R.color.black);
view.setLayoutParams(LayoutParameters);
mCustomViewContainer.addView(view);
mCustomView = view;
mCustomViewCallback = callback;
mCustomViewContainer.setVisibility(View.VISIBLE);
setContentView(mCustomViewContainer);
}
@Override
public void onHideCustomView() {
Log.d("youtube", "onHideCustomView");
if (mCustomView == null) {
return;
} else {
// Hide the custom view.
mCustomView.setVisibility(View.GONE);
// Remove the custom view from its container.
mCustomViewContainer.removeView(mCustomView);
mCustomView = null;
mCustomViewContainer.setVisibility(View.GONE);
mCustomViewCallback.onCustomViewHidden();
// Show the content view.
mContentView.setVisibility(View.VISIBLE);
setContentView(mContentView);
}
}
}
我没设置安卓的硬件加速在AndroidManifest.xml
android:hardwareAccelerated="true"
https://stackoverflow.com/questions/38842869/how-to-fullscreen-youtube-video-in-webview请参考这个希望这个帮助! – Kushan2
谢谢。我试过它不适合我。 – User9527
https://stackoverflow.com/questions/15796661/android-webview-app-wont-let-video-player-go-full-screen/16199649#16199649你见过这个吗? – Kushan2