FullScreenFragment Code

简介: package com.dexode.fragment; import android.annotation.TargetApi; import android.app.Activity; import android.
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);
	}
}

  

目录
相关文章
|
存储 编解码 监控
G-Code 详解
玩过一段时间3D打印机的朋友,都会接触到G-code文件。所谓G-code文件, 指的是3D模型在进入3D打印机实际打印之前,必须要经过切片器处理而成的一种中间格式文件。
4963 0
|
6月前
|
自然语言处理 IDE JavaScript
Fitten Code
【8月更文挑战第30天】
338 4
|
9月前
|
监控
常用T-code使用总结
常用T-code使用总结
70 1
|
Linux C++ iOS开发
VS Code 使用
作为一款开箱即用的产物,尽量不做过多额外配置。
220 0
VS Code 使用
|
Ubuntu 安全 IDE
被VS Code牢牢圈粉了!
一款得心应手的IDE,能够让开发者效率和幸福感得到极大的提升。 而VS Code这两年迅速的发展,使它俘获一大批忠实的用户。 本文,将从扩展、主题、图标等全面的介绍如何配置一款让人爽到起飞的VS Code。
被VS Code牢牢圈粉了!
|
JSON Java 程序员
code S: code style & code standard
关于代码风格与代码规范的二三事
354 0
|
移动开发 前端开发 程序员
CODE大全
我本人自己是个程序猿,在这个互联网时代,我除了工作,业余时间都在自己的博客上编写文章,我以写博客文章赚点零花钱。这是一篇软文,主要用来推广一下我的第二个网站:CODE大全。说实话,我的文笔很水,从小写作文,到现在没有得过高分。也不知道从何处开始介绍 CODE大全 。CODE大全主要包含以下几个板块博客栏目:www.codedq.net其中博客栏目包括,首页,编程语言,WEB前端,数据库,架构设
1786 1
|
人工智能 开发工具 git
Code Craft
代码篇 如果要随机产生一个a到b(包括a和b)之间的整数,可以使用下面的公式: int num = (int)( Math.random() * ( b – a + 1 )) + a; // 随机产生一个a到b(包括a和b)之间的整...
1249 0
|
Web App开发 前端开发 开发工具
强大的 VS Code
在 Build 2015 大会上,微软除了发布了 Microsoft Edge 浏览器和新的 Windows 10 系统外,最大的惊喜莫过于宣布推出免费跨平台的 Visual Studio Code 编辑器了!
5516 0