WebView 實現(xiàn)全屏播放視頻的示例代碼
最近要支持一個視頻挑戰(zhàn)的活動,要求 WebView 能全屏播放視頻,現(xiàn)在把 Android 端實現(xiàn)的方法分享給大家。
要實現(xiàn)全屏需要給 WebView 設(shè)置 WebChromeClient 并覆寫 onShowCustomView 和 onHideCustomView() 兩方法:
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
// 此處的 view 就是全屏的視頻播放界面,需要把它添加到我們的界面上
}
@Override
public void onHideCustomView() {
// 退出全屏播放,我們要把之前添加到界面上的視頻播放界面移除
}
});
為了實現(xiàn)全屏的效果,需要將視頻界面添加我們界面的最上層,有兩種方式,一種是添加到 ContentView 中,核心代碼如下:
contentParentView = findViewById(android.R.id.content);
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
contentParentView.addView(view);
}
@Override
public void onHideCustomView() {
contentParentView.removeView(fullScreenView);
}
});
另一種是添加到 WindowManager 中,完整代碼如下:
public class WebActivity extends AppCompatActivity {
...
private WindowManager windowManager;
private View fullScreenView = null;
@Override
protected void onResume() {
super.onResume();
// 如果之前處于全屏狀態(tài),重新進入后需要再次調(diào)用全屏
if (fullScreenView != null) fullScreen(fullScreenView);
}
@Override
public void onBackPressed() {
// 全屏狀態(tài)點擊返回退出全屏
if (fullScreenView != null) {
windowManager.removeViewImmediate(fullScreenView);
fullScreenView = null;
} else {
super.onBackPressed();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_webview);
windowManager = getWindowManager();
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
// 此處的 view 就是全屏的視頻播放界面,需要把它添加到我們的界面上
windowManager.addView(view, new WindowManager.LayoutParams(WindowManager.LayoutParams.TYPE_APPLICATION));
// 去除狀態(tài)欄和導航按鈕
fullScreen(view);
fullScreenView = view;
}
@Override
public void onHideCustomView() {
// 退出全屏播放,我們要把之前添加到界面上的視頻播放界面移除
windowManager.removeViewImmediate(fullScreenView);
fullScreenView = null;
}
});
}
private void fullScreen(View view) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
} else {
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
}
}
}
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android 自定義view和屬性動畫實現(xiàn)充電進度條效果
近期項目中需要使用到一種類似手機電池充電進度的動畫效果,以前沒學屬性動畫的時候,是用圖片+定時器的方式來完成的,下面給大家分享android自定義view和屬性動畫實現(xiàn)充電進度條2016-12-12
Android中如何優(yōu)雅的處理重復(fù)點擊實例代碼
這篇文章主要給大家介紹了關(guān)于Android中如何優(yōu)雅的處理重復(fù)點擊的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對各位Android開發(fā)者們具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-09-09
Android Studio設(shè)置顏色拾色器工具Color Picker教程
這篇文章主要介紹了Android Studio設(shè)置顏色拾色器工具Color Picker教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
android設(shè)備間實現(xiàn)無線投屏的示例代碼
Android提供了MediaProjection來實現(xiàn)錄屏,通過MediaProjection可以獲取當前屏幕的視頻流,而視頻流需要通過編解碼來壓縮進行傳輸,通過MediaCodec可實現(xiàn)視頻的編碼和解碼,這篇文章主要介紹了android設(shè)備間實現(xiàn)無線投屏,需要的朋友可以參考下2022-06-06
Android 對手機網(wǎng)絡(luò)的檢測和監(jiān)聽的方法示例
本篇文章主要介紹了Android 對手機網(wǎng)絡(luò)的檢測和監(jiān)聽的方法示例,主要使用BroadcastReceiver廣播接收器來接收網(wǎng)絡(luò)狀態(tài),現(xiàn)在分享給大家,也給大家做個參考,有興趣的一起來了解一下2018-03-03
Android 數(shù)據(jù)庫打包隨APK發(fā)布的實例代碼
有些時候我們的軟件用到SQLite數(shù)據(jù)庫,這個時候怎么把一個做好的數(shù)據(jù)庫打包進我們的APK呢2013-10-10

