首页 > 其他分享 >隐藏底部虚拟键NavigationBar实现全屏

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

时间:2023-04-12 21:00:52浏览次数:48  
标签:SYSTEM FLAG 虚拟 UI 全屏 main NavigationBar View


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


在 KitKat以上版本中使用Translucent将Navigation Bar透明化


为Android4.4以上系统的状态栏和导航栏填充颜色


https://github.com/jgilfelt/SystemBarTint


标签:SYSTEM,FLAG,虚拟,UI,全屏,main,NavigationBar,View
From: https://blog.51cto.com/u_5454003/6186234

相关文章

  • 虚拟现实技术的发展与应用前景
    ​ 虚拟现实技术是一种将计算机生成的虚拟环境与现实世界相结合的技术,它可以让用户身临其境地感受到虚拟环境中的场景和体验。虚拟现实技术的发展已经取得了长足的进步,未来的应用前景也非常广阔。虚拟现实技术的发展历程虚拟现实技术的发展可以追溯到20世纪60年代,当时美国空军......
  • SpringBoot实现文件图片上传并转换为虚拟路径
    页面代码<!DOCTYPEhtml><htmllang="en"xmlns:th="http://www.thymeleaf.org"><head><metacharset="UTF-8"><title>Title</title></head><body><formaction="/putpic......
  • 【Docker】docker介绍 什么是虚拟化 容器与虚拟机比较 Docker 概念 docker安装
    目录docker介绍什么是虚拟化docker是什么容器与虚拟机比较Docker概念docker安装docker介绍什么是虚拟化在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍......
  • 虚拟机磁盘的扩容 ,及扩展磁盘也扩展分区。
    问题: 我在虚拟机中编译android12,200G的硬盘用完了,在95%的时候时候,提示空间不足,然后报错。已经编译了3个小时了,如果是别的情况,我就直接添加一块新的硬盘了,但是现在只能看看能不能直接扩容这个分区,毕竟我不行在从新编译一遍。 过程: 1 首先在虚拟机中把之前的硬盘......
  • 虚拟机权限赋予
    sudochmod777untitled.sh给untitled.sh赋予所有权限(读写执行)./untitled.sh执行此可执行文件我们在Linux中经常设置文件夹或文件的权限,使用chmod777,而后面777表示的就是权限,仅仅三个数字就表示了三种角色的三种权限,我们逐个进行解释。二进制位三个数字,我们需要拆开......
  • Python虚拟环境管理
    1、安装软件1.1、安装virtualenv、virtualenvwrapperpip3installvirtualenvpip3install--no-depsstevedorevirtualenvwrapper2、配置环境变量mkdir/data//venvecho'exportWORKON_HOME=/data/venv'>>.bashrcecho'exportVIRTUALENVWRAPPER_PYTHON=/......
  • 元宇宙办公给予现实与虚拟加倍的Feeling共鸣
    近年来,元宇宙成为了科技界的一个热门话题。元宇宙被认为是一个虚拟世界,可以实现在现实世界中无法达到的各种愿望。同时,随着技术的不断进步,元宇宙正在成为一个拥有无限潜力的领域。其中,元宇宙办公成为了研究的一个重点。元宇宙办公是指用元宇宙的技术,创造一个虚拟的工作环境。这个虚......
  • 虚拟机WIN7安装
    @目录简介特点安装包下载安装VMWare安装WIN7安装问题VMwareTools安装失败共享文件夹没有在我的电脑上面显示简介VMwareWorkstation(中文名“威睿工作站”)是一款功能强大的桌面虚拟计算机软件,提供用户可在单一的桌面上同时运行不同的操作系统,和进行开发、测试、部署新的应用程......
  • 虚拟环境迁移问题排查
    背景某项目开发过程中python虚拟环境通过anacondaconda创建,然后将该虚拟环境直接复制到开发环境中,将整个项目打包成exe之后,出现了一个奇怪的问题:在win8,win10,win11上均没有问题,但在win7上运行过程中出现了缺包的问题。【WinError127】找不到指定的程序:pywin32_system32和nump......
  • Java虚拟机整体思路
    我们日常编程的Java编程是在Java语言规范代码,通过javac前端编译器编译器,产生字节码规范,此时我们应该对字节码文件结构有一个大致的认识,此时我们了解了Java虚拟机内存面局(专业术语叫运行时数据区),类加载器通过加载器将字节码文件加载到内存中(此时应该对类加载的过程有一个大致的了解......