WebView Realization Full Screen Play Video Sample Code

  • 2021-10-16 02:45:27
  • OfStack

Recently, I want to support a video challenge activity, which requires WebView to play video in full screen. Now I will share the method implemented by Android.

To achieve full screen, you need to set WebChromeClient to WebView and override onShowCustomView and onHideCustomView ():


webView.setWebChromeClient(new WebChromeClient() {

  @Override
  public void onShowCustomView(View view, CustomViewCallback callback) {
    //  Here  view  It is a full-screen video playback interface, which needs to be added to our interface 
  }

  @Override
  public void onHideCustomView() {
    //  To exit full screen playback, we need to remove the video playback interface added to the interface before 
  }
});

In order to achieve the full-screen effect, we need to add the video interface to the top layer of our interface. There are two ways, one is to add it to ContentView, and the core code is as follows:


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);
  }
});

The other is added to WindowManager, and the complete code is as follows:


public class WebActivity extends AppCompatActivity {

  ...

  private WindowManager windowManager;
  private View fullScreenView = null;

  @Override
  protected void onResume() {
    super.onResume();
    //  If you were in full screen before, you need to call full screen again after re-entering 
    if (fullScreenView != null) fullScreen(fullScreenView);
  }

  @Override
  public void onBackPressed() {
    //  Full screen status click back to exit full screen 
    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) {
        //  Here  view  It is a full-screen video playback interface, which needs to be added to our interface 
        windowManager.addView(view, new WindowManager.LayoutParams(WindowManager.LayoutParams.TYPE_APPLICATION));
        //  Remove status bar and navigation buttons 
        fullScreen(view);
        fullScreenView = view;
      }

      @Override
      public void onHideCustomView() {
        //  To exit full screen playback, we need to remove the video playback interface added to the interface before 
        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);
    }
  }
}

Related articles: