Ho una vista Web Android che carica un blog wordpress. Alcuni post del blog contengono video di YouTube che vorrei che l'utente potesse fare lo schermo intero se lo desidera. Il problema è che il pulsante a schermo intero HTML5 non fa nulla quando viene cliccato, ma blocca la vista. Qualche idea?Android WebView con un video incorporato di YouTube, il pulsante a schermo intero blocca video
risposta
Questo è qualcosa che ho passato l'ultimo giorno o così a strapparmi i capelli. Sulla base di vari pezzi di codice provenienti da tutto il web sono riuscito a farlo funzionare.
Innanzitutto, è necessario creare una classe personalizzata WebChromeClient
, che implementa i metodi onShowCustomView
e 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);
}
}
}
In sostanza, ciò che sta accadendo qui è quando viene premuto il pulsante a schermo intero, stiamo creando una nuova vista per contenere il video e nascondere la vista principale. E poi, quando lo schermo intero è chiuso, facciamo l'opposto: sbarazzati della nuova vista e visualizzate la vista originale.
Avrai bisogno di aggiungere anche tutte quelle proprietà per la classe di attività:
private MyWebChromeClient mWebChromeClient = null;
private View mCustomView;
private RelativeLayout mContentView;
private FrameLayout mCustomViewContainer;
private WebChromeClient.CustomViewCallback mCustomViewCallback;
E probabilmente vuole rendere chiudere il video a schermo intero quando viene premuto il pulsante indietro:
@Override
public void onBackPressed() {
if (mCustomViewContainer != null)
mWebChromeClient.onHideCustomView();
else if (myWebView.canGoBack())
myWebView.goBack();
else
super.onBackPressed();
}
Poi è solo una questione di usare la vostra nuova classe quando si crea la visualizzazione web:
myWebView = (WebView) findViewById(R.id.webView1);
mWebChromeClient = new WMWebChromeClient();
myWebView.setWebChromeClient(mWebChromeClient);
Funziona per me su Android 4.x. Non sono sicuro delle versioni precedenti poiché la mia app non le ha indirizzate.
Ho trovato questi link particolarmente utili: WebView and HTML5 <video> e http://code.google.com/p/html5webview/source/browse/trunk/HTML5WebView/src/org/itri/html5webview/HTML5WebView.java
È possibile avviare un app YouTube esterno quando si Cath info video URLif non è importante mostrare video di YouTube direttamente nell'applicazione.
per catturare informazioni URL del video, è necessario owerride onLoadResource
metodo:
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);
}
}
}
Bel codice, ma quando premo sul video si inizia anche a giocare in webview, come posso annullarlo? – KiKo
È possibile chiamare WebView.reload(). Ma puoi implementare video a schermo intero direttamente nell'app se non hai bisogno di avviare l'app esterna. –
Come posso farlo ..? Qualche esempio di codice ... – KiKo
- 1. iOS 8 video YouTube incorporato
- 2. Youtube Iframe nessun pulsante a schermo intero
- 3. Video youtube a schermo intero reattivo senza barre nere?
- 4. Android incorporato video HTML5
- 5. Sprite video a schermo intero
- 6. iOS Swift - Riproduzione di video youtube con lettore video a schermo intero
- 7. Il player Youtube incorporato non esce dallo schermo intero
- 8. Autorotazione iOS 6.0+ per video incorporato youtube
- 9. Mostra HTML5 Video Schermo intero
- 10. HTML5 video a schermo intero su browser mobile (Android)
- 11. iOS - Forza video a schermo intero
- 12. YouTube iframe API - Schermo intero Android
- 13. L'app Android Webview non consente al lettore video di andare a schermo intero
- 14. Android: quando guardo un video a schermo intero di YouTube torno indietro e l'attività termina
- 15. La webview Android non può rendere il video di YouTube incorporato tramite iframe
- 16. NullPointerException quando si immette il video in webview a schermo intero nokia x
- 17. Video a schermo intero senza bordi neri
- 18. Rileva quando un video webview diventa a schermo intero su ios8
- 19. SDK per iPad: il film YouTube incorporato riproduce la versione a schermo intero dietro UIWebView
- 20. Come forzare la riproduzione di un video a schermo intero nel player di YouTube?
- 21. Video di youtube incorporato con "autoplay = 1". Conta sulle visualizzazioni?
- 22. android youtube: condividi un video di YouTube sulla mia app?
- 23. Youtube HTML5 Video interrotto Funzionamento in Android
- 24. Come riprodurre i video di Youtube in Android Video View?
- 25. Fai youtube il video a schermo intero utilizzando iframe e JavaScript API
- 26. per giocare a schermo intero con Android
- 27. Video.js youtube il video
- 28. come incorporare il video di YouTube su iOS e riprodurlo direttamente sul UIWebView senza schermo intero
- 29. webview con schermo intero in Android
- 30. Intercettazione della richiesta di origine video HTML5 in Android WebView
Nel codice di esempio, che cosa è mContentView nel contesto di una visione per lo schermo pieno? Immagino che sia una specie di layout che hai gonfiato, ma come hai fatto a schermo intero. Puoi pubblicare l'XML per l'oggetto mContentView? –
'mContentView' è la vista attività principale, che viene nascosta quando il video viene reso a schermo intero. Comunque non sto facendo automaticamente il video a schermo intero; l'utente lo fa (se lo desidera) quando guarda il video. –
@MarkParnell Dai anche i tuoi commenti anche qui http://stackoverflow.com/questions/18533678/playing-youtube-videos-smoothly-in-web-view – anshul