Tôi có một webview android tải một blog wordpress. Một số bài đăng trên blog chứa video trên youtube mà tôi muốn người dùng có thể tạo toàn màn hình nếu muốn. Vấn đề là nút toàn màn hình HTML5 không làm gì khi được nhấp nhưng đóng băng chế độ xem. Bất kỳ ý tưởng nào?Android WebView với video được nhúng trên youtube, nút toàn màn hình đóng băng video
Trả lời
Đây là thứ mà tôi đã dành cả ngày để xé tóc ra. Dựa trên các bit mã khác nhau trên web tôi đã quản lý để làm cho nó hoạt động.
Trước tiên, bạn cần tạo lớp tùy chỉnh WebChromeClient
, thực hiện các phương thức onShowCustomView
và 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);
}
}
}
Về cơ bản, điều xảy ra ở đây là khi nhấn nút toàn màn hình, chúng tôi đang tạo chế độ xem mới để giữ video và ẩn chế độ xem chính. Và sau đó khi toàn màn hình được đóng lại, chúng tôi làm ngược lại - loại bỏ chế độ xem mới và hiển thị chế độ xem gốc.
Bạn sẽ cũng cần phải thêm tất cả những thuộc tính cho lớp hoạt động của bạn:
private MyWebChromeClient mWebChromeClient = null;
private View mCustomView;
private RelativeLayout mContentView;
private FrameLayout mCustomViewContainer;
private WebChromeClient.CustomViewCallback mCustomViewCallback;
Và có thể bạn muốn làm cho nó đóng video toàn màn hình khi vào nút quay lại được nhấn:
@Override
public void onBackPressed() {
if (mCustomViewContainer != null)
mWebChromeClient.onHideCustomView();
else if (myWebView.canGoBack())
myWebView.goBack();
else
super.onBackPressed();
}
Sau đó, việc sử dụng lớp học mới của bạn chỉ là vấn đề khi bạn tạo chế độ xem web của mình:
myWebView = (WebView) findViewById(R.id.webView1);
mWebChromeClient = new WMWebChromeClient();
myWebView.setWebChromeClient(mWebChromeClient);
Điều này làm việc cho tôi trên Android 4.x. Không chắc chắn về các phiên bản trước đó vì ứng dụng của tôi không nhắm mục tiêu đến chúng.
tôi tìm thấy những liên kết này đặc biệt hữu ích: WebView and HTML5 <video> và http://code.google.com/p/html5webview/source/browse/trunk/HTML5WebView/src/org/itri/html5webview/HTML5WebView.java
Bạn có thể bắt đầu một ứng dụng YouTube ngoài khi bạn sẽ Cath thông tin về video URLif nó không phải là điều quan trọng để hiển thị video YouTube trực tiếp trong ứng dụng.
Để bắt URL thông tin video Bạn cần phải owerride onLoadResource
phương pháp:
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);
}
}
}
Đẹp mã, nhưng khi tôi bấm vào video nó cũng bắt đầu chơi trong webview, làm thế nào tôi có thể hủy bỏ điều đó? – KiKo
Bạn có thể gọi WebView.reload(). Nhưng bạn có thể thực hiện video toàn màn hình trực tiếp trong ứng dụng nếu bạn không cần phải bắt đầu ứng dụng nước ngoài. –
Làm cách nào tôi có thể làm điều đó ..? Một số mã ví dụ ... – KiKo
- 1. YouTube Video không phát trong WebView - Android
- 2. Android - WebView không phát video trên YouTube
- 3. Video được nhúng trên YouTube ở chế độ HTML5 gốc và toàn màn hình
- 4. phát video trên youtube trong WebView
- 5. API iframe Youtube - Toàn màn hình Android
- 6. Video nhúng Youtube - xóa màn hình thông tin cuối cùng
- 7. Nhúng video Youtube vào trong ứng dụng Android
- 8. Xóa lớp phủ "phát trên youtube" trên video được nhúng
- 9. Phát video youtube được nhúng trong vòng
- 10. Youtube Iframe không có nút toàn màn hình
- 11. WebView với số lần phát video được nhúng trong nền
- 12. Hiển thị HTML5 Video toàn màn hình
- 13. Chụp ảnh màn hình của video được nhúng bằng C#
- 14. html5 thẻ video để chơi toàn màn hình với Android
- 15. Phát video trên Youtube trong UIWebView mà không cần toàn màn hình
- 16. Nút đóng trên video HTML5 (iPad)
- 17. Android nhúng video HTML5
- 18. iOS - Buộc video toàn màn hình
- 19. Nhúng video youtube không có liên kết youtube
- 20. SDK iPad: Phim được nhúng trên YouTube phát phiên bản toàn màn hình sau UIWebView
- 21. webview với toàn màn hình trong android
- 22. Cách nhúng và phát video YouTube trong android
- 23. JWPlayer cho video nền toàn màn hình
- 24. WebView một phần màn hình với <video> được cắt thành một nửa
- 25. Nhúng video youtube vào ứng dụng android bằng nhật thực?
- 26. Cách tạo hình thu nhỏ video trên YouTube trong Android?
- 27. Hãy youtube video toàn màn hình sử dụng iframe và javascript API
- 28. Toàn màn hình youtube video, xoay và thanh trạng thái (iOS)
- 29. Nhúng video trên YouTube bằng mẫu jQuery - C#
- 30. Giả lập Android đóng băng trên màn hình tải
Trong mẫu mã của bạn, mContentView là gì trong bối cảnh của một cái nhìn cho toàn màn hình? Tôi tưởng tượng đó là một loại bố trí bạn đã tăng cao, nhưng làm thế nào bạn làm cho nó toàn màn hình. Bạn có thể đăng XML cho đối tượng mContentView của mình không? –
'mContentView' là chế độ xem hoạt động chính, được ẩn khi video được tạo chế độ toàn màn hình. Tôi không tự động tạo video toàn màn hình; người dùng làm điều đó (nếu họ muốn) khi xem video. –
@MarkParnell Xin vui lòng cho ý kiến của bạn ở đây cũng http://stackoverflow.com/questions/18533678/playing-youtube-videos-smoothly-in-web-view – anshul