2016-08-21 78 views
1

我使用WebView加载视频。我忽略了onShowCustomView(去全屏)和onHideCustomView(去掉全屏)的方法。 当我去到全屏模式变量fullscreen设置为trueOnSystemUiVisibilityChangeListener电话GoFullscreen()功能设置SYSTEM_UI_FLAG_FULLSCREEN标志,也隐藏操作栏:当全屏显示控制器时,状态栏回显(可见)

decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN); getSupportActionBar().hide();

但是,当我去到全屏模式状态栏如果视频控件可见,则可见。所以只有当视频控制消失(不可见)时,状态栏才会隐藏。

截图看到一个问题,视频和状态的控制:

------------ 正常(OK)

normal mode

--- - fullscreen with video controls(not ok)-------- fullscreen without video controls(ok) enter image description hereenter image description here

代码:

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智能手机上进行过测试,并且没有这个问题。还需要解决它的奇巧设备

+0

检查更新后的答案。 –

回答

0

最后,我决定,我不应该使用OnSystemUiVisibilityChangeListener(它会工作车),只是通话FullscreenOn in onShowCustomView and FullscreenOff in onHideCustomView。这将工作良好,但仍然不完全隐藏KitKat的侧边栏(但适用于其他版本的Android)

private void FullscreenOn() { 
     decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN); 
     getSupportActionBar().hide(); 
    } 

    private void FullscreenOff() { 
     decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); 
     getSupportActionBar().show(); 
    } 
0

你所有的东西还是一样只是改变了全屏方法如下,并

public class MainActivity extends Activity { 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 


     } 

     private void GoFullscreen() { 
      getWindow().getDecorView().setSystemUiVisibility(
        View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
          | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
          | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
          | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 
          | View.SYSTEM_UI_FLAG_FULLSCREEN 
          | View.SYSTEM_UI_FLAG_IMMERSIVE); 
     } 

    } 
+0

你好,我在KitKat上有这个问题(我还没有测试更高的API) – user25

相关问题