我有一个加载wordpress博客的android webview。一些博客文章包含youtube视频,我希望用户能够按照他们的意愿制作全屏。问题在于HTML5全屏按钮在点击时不会执行任何操作,但会冻结视图。 任何想法?带有嵌入式YouTube视频的Android WebView,全屏按钮冻结视频
28
A
回答
48
这是我花了最后一天左右的时间把我的头发撕掉了。基于来自网络的各种代码,我设法使其工作。
首先,您需要创建一个自定义WebChromeClient
类,该类实现了onShowCustomView
和onHideCustomView
方法。
private 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) {
// if a view already exists then immediately terminate the new one
if (mCustomView != null) {
callback.onCustomViewHidden();
return;
}
mContentView = (RelativeLayout) 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() {
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);
}
}
}
基本上,当全屏按钮按下得到,我们正在创造一个新的视图来保存视频和隐藏主视图这里发生了什么是。然后当全屏关闭时,我们会做相反的事情 - 摆脱新视图并显示原始视图。
你也需要所有这些属性添加到您的活动类:
private MyWebChromeClient mWebChromeClient = null;
private View mCustomView;
private RelativeLayout mContentView;
private FrameLayout mCustomViewContainer;
private WebChromeClient.CustomViewCallback mCustomViewCallback;
而且你可能希望把它关闭全屏视频时按下后退按钮:
@Override
public void onBackPressed() {
if (mCustomViewContainer != null)
mWebChromeClient.onHideCustomView();
else if (myWebView.canGoBack())
myWebView.goBack();
else
super.onBackPressed();
}
然后,只需要在创建webview时使用新类:
myWebView = (WebView) findViewById(R.id.webView1);
mWebChromeClient = new WMWebChromeClient();
myWebView.setWebChromeClient(mWebChromeClient);
这适用于Android 4.x上的我。由于我的应用没有针对他们,因此不确定早期版本。
我发现这些链接特别有用:WebView and HTML5 <video>和http://code.google.com/p/html5webview/source/browse/trunk/HTML5WebView/src/org/itri/html5webview/HTML5WebView.java
0
可以启动外部YouTube应用时,你会CATH视频信息URLif并不重要,直接在应用中显示YouTube视频。
为了赶上视频信息的网址你需要owerride onLoadResource
方法:
new WebViewClient() {
@Override
public void onLoadResource(WebView view, String url) {
if (url.startsWith("http://www.youtube.com/get_video_info?")) {
try {
String path = url.replace("http://www.youtube.com/get_video_info?", "");
String[] parqamValuePairs = path.split("&");
String videoId = null;
for (String pair : parqamValuePairs) {
if (pair.startsWith("video_id")) {
videoId = pair.split("=")[1];
break;
}
}
if(videoId != null){
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com"))
.setData(Uri.parse("http://www.youtube.com/watch?v=" + videoId)));
needRefresh = true;
return;
}
} catch (Exception ex) {
}
} else {
super.onLoadResource(view, url);
}
}
}
相关问题
- 1. Youtube视频冻结点击android的webview中的全屏模式
- 2. 嵌入的Youtube视频不会全屏
- 3. 的Youtube嵌入视频,在播放按钮全屏点击
- 4. 如何全屏YouTube视频中的WebView
- 5. Youtube视频播放按钮在Android视频iframe中无效webview
- 6. 嵌入式视频/ youtube视频不停
- 7. WPF - WebView YouTube视频 - 强制全屏
- 8. 在WebView中嵌入YouTube视频不尊重全屏设置
- 9. 嵌入式视频冻结浏览器
- 10. HTML5视频全屏按钮
- 11. 嵌入式视频youtube
- 12. 在android webview中以全屏模式播放YouTube视频
- 13. 嵌入YouTube视频
- 14. 嵌入youtube视频
- 15. 嵌入YouTube视频?
- 16. WebView中的全屏视频
- 17. 的WebView视频全屏
- 18. 在WebView中嵌入Youtube视频
- 19. 嵌入式YouTube视频 - 结束时删除视频
- 20. 播放YouTube HTML5的嵌入式视频在Android的WebView中
- 21. 嵌入式视频,Javascript按钮使其全屏?
- 22. 以原生HTML5模式和全屏模式嵌入YouTube视频
- 23. iPhone播放嵌入式视频全屏
- 24. 从Youtube的嵌入式视频全屏幕
- 25. 嵌入的Youtube视频显示黑屏
- 26. 全屏播放youtube视频?
- 27. 全屏播放youtube视频?
- 28. 显示YouTube全屏视频
- 29. 播放YouTube视频全屏
- 30. “嵌入式”YouTube视频无法嵌入
在您的代码示例,什么是mContentView在全屏视图的背景?我想这是你膨胀的某种布局,但你是如何使它全屏的。你可以发布你的mContentView对象的XML吗? –
'mContentView'是主要的活动视图,当视频变成全屏时它会被隐藏起来。尽管如此,我并没有自动制作视频全屏。用户在观看视频时会这样做(如果他们想的话)。 –
@MarkParnell请给你的意见在这里也 http://stackoverflow.com/questions/18533678/playing-youtube-videos-smoothly-in-web-view – anshul