我使用WebView加載視頻。我忽略了onShowCustomView
(去全屏)和onHideCustomView
(去掉全屏)的方法。 當我去到全屏模式變量fullscreen
設置爲true
和OnSystemUiVisibilityChangeListener
電話GoFullscreen()
功能設置SYSTEM_UI_FLAG_FULLSCREEN標誌,也隱藏操作欄:當全屏顯示控制器時,狀態欄回顯(可見)
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
getSupportActionBar().hide();
但是,當我去到全屏模式狀態欄如果視頻控件可見,則可見。所以只有當視頻控制消失(不可見)時,狀態欄纔會隱藏。
截圖看到一個問題,視頻和狀態的控制:
------------ 正常(OK)
--- - fullscreen with video controls(not ok)-------- fullscreen without video controls(ok)
代碼:
public class TestActivity extends AppCompatActivity {
private MyWebChromeClient mWebChromeClient = null;
private View mCustomView;
private LinearLayout mContentView;
private FrameLayout mCustomViewContainer;
private WebChromeClient.CustomViewCallback mCustomViewCallback;
private Bundle webViewBundle;
private WebView mWebView;
private int viewWidth;
private int viewHeight;
private LinearLayout.LayoutParams layoutParams;
private View decorView;
private Boolean Fullscreen = false;
private void GoFullscreen() {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
getSupportActionBar().hide();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
decorView = getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
if (Fullscreen) {
GoFullscreen();
} else {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
getSupportActionBar().show();
}
}
});
mWebView = (WebView) findViewById(R.id.webView);
mWebView.setBackgroundColor(Color.BLACK);
mWebChromeClient = new MyWebChromeClient();
mWebView.setWebChromeClient(mWebChromeClient);
mWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
});
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
viewWidth = 480;
viewHeight = (int) (((double) viewWidth) * 0.5625); // video aspect 16:9
layoutParams = new LinearLayout.LayoutParams(viewWidth, viewHeight);
mWebView.setLayoutParams(layoutParams);
if (webViewBundle != null) {
mWebView.restoreState(webViewBundle);
} else {
mWebView.loadUrl("http://vk.com/video_ext.php?oid=-89326201&id=171643607&hash=2b18b090e13222dc&hd=1");
}
}
@Override
public void onPause() {
super.onPause();
webViewBundle = new Bundle();
mWebView.saveState(webViewBundle);
mWebView.onPause();
}
@Override
public void onResume() {
super.onResume();
mWebView.onResume();
}
@Override
public void onDestroy() {
super.onDestroy();
mWebView.destroy();
}
public class MyWebChromeClient extends WebChromeClient {
@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;
}
Fullscreen = true;
FrameLayout.LayoutParams LayoutParameters = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
mContentView = (LinearLayout) findViewById(R.id.activity_main);
mCustomViewContainer = new FrameLayout(TestActivity.this);
mCustomViewContainer.setLayoutParams(LayoutParameters);
mCustomViewContainer.setBackgroundResource(android.R.color.black);
view.setLayoutParams(LayoutParameters);
mCustomViewContainer.addView(view);
mCustomView = view;
mCustomViewCallback = callback;
mContentView.setVisibility(View.GONE);
GoFullscreen();
mCustomViewContainer.setVisibility(View.VISIBLE);
setContentView(mCustomViewContainer);
}
@Override
public void onHideCustomView() {
if (mCustomView != null) {
// Hide the custom view.
mCustomView.setVisibility(View.GONE);
// Remove the custom view from its container.
mCustomViewContainer.removeView(mCustomView);
mCustomView = null;
mCustomViewContainer.setVisibility(View.GONE);
mCustomViewContainer = null;
mCustomViewCallback.onCustomViewHidden();
// Show the content view.
Fullscreen = false;
mContentView.setVisibility(View.VISIBLE);
setContentView(mContentView);
}
}
}
@Override
public void onBackPressed() {
if (mCustomViewContainer != null)
mWebChromeClient.onHideCustomView();
else if (mWebView.canGoBack())
mWebView.goBack();
else
super.onBackPressed();
}
}
如何解決呢?
p.s.的build.gradle API:compileSdkVersion 23/buildToolsVersion 「23.0.1」/ 19的minSdkVersion/targetSdkVersion 23
UPDATE:似乎只在奇巧的問題。我已經在API 23智能手機上進行過測試,並且沒有這個問題。還需要解決它的奇巧設備
檢查更新後的答案。 –