Android屏幕底部的黑色导航栏无法轻松移除.它从3.0开始就是Android的一部分,作为硬件按钮的替代品.这是一张图片:
如何获得此UI元素的宽度和高度的大小(以像素为单位)?
我目前正在努力解决这个问题.我需要检查安装了应用程序的设备是否有硬件菜单键.因为它不存在于像Galaxy Nexus这样的设备上,所以我在这种情况下直接在UI中显示它.
我已经查看了PackageManager.hasSystemFeature(),但没有找到任何有用的东西.
有没有人这样做过?
不知何故,应用程序" Navbar Apps "允许自定义导航栏的背景,即使它不在前景中,甚至不仅仅是简单的颜色.
我认为只有当应用程序位于前台时才能改变它的颜色......
我在一些自定义的roms上看到它,甚至在播放音乐时都有特效,但我不知道即使没有自定义ROM(或root)也可以自定义它.
这是一个黑客?它们如何改变,而不仅仅是导航栏的颜色,甚至为它设置背景图像(包括动态的电池状态)?
是否也可以更改其他系统栏,例如通知栏?
它如何检查哪个应用程序位于前台(可能需要根据当前应用程序决定何时更改颜色)?它是一个新的API吗?我认为用于获取前台活动的API已被弃用,现在无论如何都没有帮助......
目前我有以下资源文件夹:
1.layout
-sw600dp
2. layout-sw600dp-notlong
我们的想法是我们有3种类型的设备,设备应该相应地使用正确文件夹中的资源.这些设备是:
1.三星Galaxy Tab 10.1,1280 X 800 mdpi.16/10
2.华硕Transformer TFT 101,1280 X 800 mdpi.16/10.
3.通用平板电脑,800 X 600 ldpi.4/3.
问题是所有3个设备都使用来自layout-sw600dp-notlong的资源.根据我的理解,4/3被归类为-notlong设备.
我的标识符使用有什么问题吗?或者是否有针对标识符报告的错误?
预先感谢.
我正在编写一个需要计算屏幕高度才能正确显示内容的 Android 应用程序。但是当切换到全屏手势模式时,我在 Mi 设备(Mi 9 SE)中获得的高度不正确。如何获取屏幕的真实高度,或检查用户是否在 Mi 设备中打开了全屏手势模式?
我已经尝试过这些建议。
从Android 3.0开始,显示屏上有一个带有后退和主页按钮的导航栏.现在,如果我得到这样的屏幕尺寸
ClockLwp.ScreenHeight = getWindowManager().getDefaultDisplay().getHeight();
ClockLwp.ScreenWidth = getWindowManager().getDefaultDisplay().getWidth();
Run Code Online (Sandbox Code Playgroud)
这个的
getResources().getDisplayMetrics().widthPixels
getResources().getDisplayMetrics().heightPixels
Run Code Online (Sandbox Code Playgroud)
我对风景和肖像有不同的价值.这是我的意思的一个例子:
Acer Iconia A500人像模式:800 x 1232 Acer Iconia A500风景模式:1280 x 752
AFAIK适用于所有带有这种导航栏的设备.(例如三星Galaxy Nexus,GalaxyTab 10.1等)
现在我的问题是,如果我处于纵向模式,我怎样才能获得横向模式的值,反之亦然?
如何检测导航栏的存在并将其隐藏?
在我的onCreate()
I调用hideNavigationBar()
方法中隐藏导航栏,然后我注册一个监听器以隐藏导航栏,每当用户触摸屏幕上的文档报告的任何位置时它就变得可见.当触摸事件后导航栏变为可见hideNavigationBar()
时,侦听器再次调用该方法,但它没有效果,该栏仍然可见.
这是我的onCreated()
方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
hideNavigationBar();
View decorView = getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener
(new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
Toast.makeText(getApplicationContext(), "Visible", Toast.LENGTH_SHORT).show();
hideNavigationBar();
} else {
Toast.makeText(getApplicationContext(), "Not visible", Toast.LENGTH_SHORT).show();
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
这是我的hideNavigationBar()
方法:
private void hideNavigationBar() {
Toast.makeText(getApplicationContext(), "hideNavigationBar()", Toast.LENGTH_SHORT).show();
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
} …
Run Code Online (Sandbox Code Playgroud) 我需要检查一个设备是否有软导航栏,我按照这里的建议.
它工作得很好,除了onePlus设备,出于某种原因,这段代码:
int id = resources.getIdentifier("config_showNavigationBar", "bool", android");
return id > 0 && resources.getBoolean(id);
Run Code Online (Sandbox Code Playgroud)
虽然显示了软导航栏,但返回false.
知道如何才能得到正确的结果?
我更喜欢不计算实际宽度和可用宽度,这似乎是昂贵的操作.
谢谢.
android ×8
fullscreen ×1
graphics ×1
hardware ×1
key ×1
menu ×1
screen ×1
screen-size ×1
xiaomi ×1