根據開發需求,需要在app中加載網絡上的視頻。本來是挺簡單的一件事,webview.loadUrl(視頻地址),但是在處理全屏的時候總是失敗。
下面用代碼說話:
//全屏顯示的視圖對象
private View mFullVideoView;
//一個通知webview退出全屏的回調接口
private WebChromeClient.CustomViewCallback mCustomViewCallback;
private void initWebview() {
mWebView = (WebView) findViewById(R.id.wv_load_web);
final WebSettings settings = mWebView.getSettings();
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
settings.setAppCacheEnabled(true);
settings.setDatabaseEnabled(true);
settings.setDomStorageEnabled(true);
settings.setJavaScriptEnabled(true);
settings.setLoadsImagesAutomatically(true);
mWebView.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
}
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
// super.onShowCustomView(view, callback);
//改變屏幕方向,SCREEN_ORIENTATION_LANDSCAPE--橫排,SCREEN_ORIENTATION_PORTRAIT--豎排
MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
mWebView.setVisibility(View.GONE);
//判斷mFullVideoView是否爲空,來判斷是否處於全屏狀態
if (mFullVideoView != null){
callback.onCustomViewHidden();
return;
}
//把全屏顯示的視圖對象添加到佈局
mFrameLayout.addView(view);
mFrameLayout.setVisibility(View.VISIBLE);
//獲取全屏顯示視圖對象
mFullVideoView = view;
//退出全屏的回調接口
mCustomViewCallback = callback;
mActionBar.hide();
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
//關閉全屏顯示
@Override
public void onHideCustomView() {
// super.onHideCustomView();
if (mFullVideoView == null){
return;
}
//設置屏幕豎排
MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
//隱藏全局佈局
mFrameLayout.setVisibility(View.GONE);
//移除全屏顯示的視圖對象
mFrameLayout.removeView(mFullVideoView);
mFullVideoView = null;
mCustomViewCallback.onCustomViewHidden();
mWebView.setVisibility(View.VISIBLE);
mCustomViewCallback = null;
}
代碼沒有問題,能夠實現全屏,但是橫屏後會重新加載onCreate()方法,使得整個界面又重新加載。解決辦法就是在配置文件中的activity中配置
android:configChanges="orientation|screenSize"屬性。這樣就可以正常全屏播放視頻了。