FullScreenFragment Code

package com.dexode.fragment;


import android.annotation.TargetApi;
import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnSystemUiVisibilityChangeListener;
import android.view.WindowManager;

/**
 * @author Dawid Drozd
 *         You must manually call onKeyDown and onWindowFocusChanged.
 */
public class FullscreenFragment extends Fragment implements Runnable {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setFullscreen();
		if (Build.VERSION.SDK_INT > 10) {
			registerSystemUiVisibility();
		}
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
		if (Build.VERSION.SDK_INT > 10) {
			unregisterSystemUiVisibility();
		}
		exitFullscreen(getActivity());
	}

	public static boolean isImmersiveAvailable() {
		return android.os.Build.VERSION.SDK_INT >= 19;
	}

	public void onWindowFocusChanged(boolean hasFocus) {
		if (hasFocus) {
			_handler.removeCallbacks(this);
			_handler.postDelayed(this, 300);
		} else {
			_handler.removeCallbacks(this);
		}
	}

	public void onKeyDown(int keyCode) {
		if ((keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_VOLUME_UP)) {
			_handler.removeCallbacks(this);
			_handler.postDelayed(this, 500);
		}
	}

	@Override
	public void onStop() {
		_handler.removeCallbacks(this);
		super.onStop();
	}

	@Override
	public void run() {
		setFullscreen();
	}

	public void setFullscreen() {
		setFullscreen(getActivity());
	}

	public void setFullscreen(Activity activity) {
		if (Build.VERSION.SDK_INT > 10) {
			int flags = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_FULLSCREEN;

			if (isImmersiveAvailable()) {
				flags |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
						 View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
			}

			activity.getWindow().getDecorView().setSystemUiVisibility(flags);
		} else {
			activity.getWindow()
					.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
		}
	}

	public void exitFullscreen(Activity activity) {
		if (Build.VERSION.SDK_INT > 10) {
			activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
		} else {
			activity.getWindow()
					.setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,
							  WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
		}
	}

	private Handler _handler = new Handler();

	@TargetApi(Build.VERSION_CODES.HONEYCOMB)
	private void registerSystemUiVisibility() {
		final View decorView = getActivity().getWindow().getDecorView();
		decorView.setOnSystemUiVisibilityChangeListener(new OnSystemUiVisibilityChangeListener() {

			@Override
			public void onSystemUiVisibilityChange(int visibility) {
				if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
					setFullscreen();
				}
			}
		});
	}

	@TargetApi(Build.VERSION_CODES.HONEYCOMB)
	private void unregisterSystemUiVisibility() {
		final View decorView = getActivity().getWindow().getDecorView();
		decorView.setOnSystemUiVisibilityChangeListener(null);
	}
}

  

posted @ 2016-04-05 16:38  狂奔的小狮子  阅读(380)  评论(0编辑  收藏  举报