`

隐藏底部虚拟键NavigationBar实现全屏

阅读更多
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;

public class MainActivity extends Activity implements OnClickListener {
	View main;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		main = getLayoutInflater().inflate(R.layout.activity_main, null);
		main.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
		main.setOnClickListener(this);
		setContentView(main);

	}

	@Override
	public void onClick(View v) {
		int i = main.getSystemUiVisibility();
		if (i == View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) {//2
			main.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
		} else if (i == View.SYSTEM_UI_FLAG_VISIBLE) {//0
			main.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
		} else if (i == View.SYSTEM_UI_FLAG_LOW_PROFILE) {//1
			main.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
		}
	}
}



Android 检查设备是否存在 导航栏 NavigationBar
目前也没有可靠的方法来检查设备上是否有导航栏。可以使用KeyCharacterMap.deviceHasKey来检查设备上是否有某些物理键,比如说菜单键、返回键、Home键。然后我们可以通过存在物理键与否来判断是否有NavigationBar(一般来说手机上物理键、NavigationBar共存).
public static int getNavigationBarHeight(Activity activity) {
		Resources resources = activity.getResources();
		int resourceId = resources.getIdentifier("navigation_bar_height",
				"dimen", "android");
		//获取NavigationBar的高度
		int height = resources.getDimensionPixelSize(resourceId);
		return height;
	}

上面这段代码,在绝大多数情况下都能获取到NavigationBar的高度。所以有人想通过这个高度来判断是否有NavigationBar 是不行的。当然4.0版本以下就不用说了。确认个问题,NavigationBar是4.0以上才有么?
因为设备有物理键仍然可以有一个导航栏。任何设备运行自定义rom时都会设置一个选项,是否禁用的物理键,并添加一个导航栏。看看API:
ViewConfiguration.get(Context context).hasPermanentMenuKey()  有这么一句描述 :Report if the device has a permanent menu key available to the user(报告如果设备有一个永久的菜单主要提供给用户).


android.view.KeyCharacterMap.deviceHasKey(int keyCode) 的描述:Queries the framework about whether any physical keys exist on the any keyboard attached to the device that are capable of producing the given key code(查询框架是否存在任何物理键盘的任何键盘连接到设备生产给出关键代码的能力。).

那么解决的办法就是:
@SuppressLint("NewApi") 
	public static boolean checkDeviceHasNavigationBar(Context activity) {

		//通过判断设备是否有返回键、菜单键(不是虚拟键,是手机屏幕外的按键)来确定是否有navigation bar
		boolean hasMenuKey = ViewConfiguration.get(activity)
				.hasPermanentMenuKey();
		boolean hasBackKey = KeyCharacterMap
				.deviceHasKey(KeyEvent.KEYCODE_BACK);

		if (!hasMenuKey && !hasBackKey) {
			// 做任何你需要做的,这个设备有一个导航栏
			return true;
		}
		return false;
	}


http://blog.csdn.net/lnb333666/article/details/41821149

在 KitKat以上版本中使用Translucent将Navigation Bar透明化
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0616/3052.html

为Android4.4以上系统的状态栏和导航栏填充颜色
https://github.com/jgilfelt/SystemBarTint

Android状态栏合集-管你透不透明
http://www.open-open.com/lib/view/open1468204363687.html

Android状态栏微技巧,带你真正理解沉浸式模式
http://www.open-open.com/lib/view/open1472112617427.html

Android5.0之Toolbar详解
http://www.open-open.com/lib/view/open1484918068393.html
分享到:
评论

相关推荐

    Android隐藏和沉浸式虚拟按键NavigationBar的实现方法

    Android 隐藏和沉浸式虚拟按键NavigationBar的实现方法 Android 隐藏和沉浸式虚拟按键NavigationBar的实现方法是指在 Android 应用程序中隐藏或沉浸式虚拟按键NavigationBar,以便更好地展示应用程序的内容。这种...

    安卓7.0SystemUI虚拟键动态显示隐藏

    安卓7.0 SystemUI 虚拟键Navigationbar动态显示和隐藏的功能,以及添加自定义的按键,音量加减,隐藏键的补丁

    Android判断NavigationBar是否显示的方法(获取屏幕真实的高度)

    有些时候,我们需要知道当前手机上是否显示了NavigationBar,也就是屏幕底部的虚拟按键。 比如截屏的时候,要获取屏幕的高度,必须包括NavigationBar的高度。 试过网上的多种方法,但是对那种可以通过手势来显示/...

    0001-导航栏添加按钮隐藏虚拟按键,上滑调出虚拟按键.patch

    0001-导航栏添加按钮隐藏虚拟按键,上滑调出虚拟按键

    Android NavigationBar,Status Bar隐藏与浮层

    Android NavigationBar隐藏与浮层,Status Bar的隐藏与浮层效果,SystemBar(Status Bar 和Navigation Bar)设置 Immersive与Sticky Immersion风格

    AndroidP_SystemUI下拉栏全屏覆盖NavigationBar导航栏

    AndroidP横屏项目,修改SystemUI下拉栏全屏显示,并覆盖NavigationBar导航栏之上,原博客 https://blog.csdn.net/shusuanly/article/details/115264404

    自动隐藏NavigationBar的帮助类

    * 自动隐藏NavigationBar的帮助类 * * 代码测试环境: * 机型:华为(SCL-TL00H) * ANDROID版本:5.1.1 * 系统版本:EMUI3.1 * * TODO: 在EMUI3.1中发现,操作系统级别的NavigationBar时,当前应用设置的...

    修改framework,显示隐藏navigationBar

    修改framework,显示隐藏navigationBar 从Android4.4.2起,可以设置: 1)View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 2)View.SYSTEM_UI_FLAG_IMMERSIVE 同时设置以上两个参数,即使Touch Screen时,Navigation bar...

    NavigationBar做动画的demo

    在Android开发中,`NavigationBar`是手机屏幕底部的标准组件,显示着应用的导航元素,如返回按钮、应用标题和操作菜单等。`NavigationBar`的动画效果可以为用户提供更丰富的交互体验,增强应用的视觉吸引力。本`demo...

    activity全屏实现沉浸式效果,并且单独触摸不会弹出虚拟按键的方法

    活动全屏实现沉浸式效果,避免虚拟按键弹出 actividad全屏实现沉浸式效果是 Android 开发中常见的一种需求,今天我们将分享两种实现活动全屏沉浸式效果的方法,并且单独触摸不会弹出虚拟按键。 方法一: 在 ...

    navigationbar.zip

    Android 8.1实现底部虚拟按钮NavigationBar的点击隐藏与滑动显示整个过程需要修改的完整代码,包含下面几个完整文件。 frameworks/base/packages/SystemUI/res/values-sw372dp/config.xml frameworks/base/packages/...

    [微信小程序开发]如何去掉或隐藏小程序顶部栏navigationBar

    小程序全局配置app.josn增加选项:"navigationStyle": "custom", 具体如下: 原生小程序开发 打开 app.json:   { "pages": [ "pages/index/index", "pages/logs/index" ], "window": { "backgroundTextStyle": ...

    SystemUI NavigationBar流程梳理

    SystemUI 的 NavigationBar 是 Android 系统中一个非常重要的组件,它负责管理屏幕底部的导航栏。下面我们将详细介绍 NavigationBar 的流程梳理。 一、布局结构 NavigationBar 的布局结构可以分为三层:...

    ios自定义tabbar和navigationbar

    4. **隐藏和显示navigationBar**: 调用self.navigationController.navigationBar.hidden = YES/NO来控制其可见性。 5. **自定义过渡动画**: 如果需要更复杂的动画效果,可以实现UINavigationControllerDelegate的...

    ios-navigationBar渐变.zip

    在“ios-navigationBar渐变.zip”这个压缩包中,包含了一个实现“仿简书滑动隐藏NavigationBar”的示例。这个功能在许多App中都能见到,比如简书、微信等,它通过滑动手势使NavigationBar透明度或高度产生渐变效果,...

    NavigationBar

    在Android应用开发中,`NavigationBar`通常指的是底部导航栏,它是界面设计中常见的组件,用于在多个主要功能间切换。用户可以通过点击不同的图标或文字标签在各个页面间轻松跳转,提升用户体验。在这个例子中,标题...

    Android 虚拟按键适配动态调整布局的方法

    Android 虚拟按键适配动态调整布局的方法是指在 Android 开发中,针对不同型号手机的虚拟按键的适配问题,来实现动态调整布局的方法。该方法主要通过监听虚拟键的切换,获取当前 View 可显示的实际高度,然后根据...

    ios-自定义NavigationBar.zip

    在压缩包中的“自定义NavigationBar_01”可能是项目的第一部分,可能包含了初始化自定义导航栏的基本代码或者一个示例的实现。为了深入理解这个项目,你需要解压文件,查看源代码,并逐步理解每一部分是如何工作的。...

Global site tag (gtag.js) - Google Analytics