android上获取屏幕高度,在Android中获取屏幕高度
如何获取Android屏幕的可用高度?我需要减去状态栏/菜单栏或屏幕上可能显示的任何其他装饰的高度,并且需要它适用于所有设备。另外,我需要在onCreate函数中知道这一点。我知道之前曾有人问过这个问题,但我已经尝试过他们的解决方案,但没有一个起作用。这是我尝试过的一些方法:
我已经在API 7-17上测试了此代码。不幸的是,在API 13的水平和垂直底部都没有多余的空间,而在API
10、8和7的水平和垂直底部都没有足够的空间。(我尚未测试过时的API):
Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
display.getMetrics(metrics);
screenWidth = metrics.widthPixels;
screenHeight = metrics.heightPixels;
TypedValue tv = new TypedValue();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
{
if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))
screenHeight -= TypedValue.complexToDimensionPixelSize(tv.data,getResources().getDisplayMetrics());
}
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0)
screenHeight -= getResources().getDimensionPixelSize(resourceId);
这没有考虑状态栏/菜单栏:
Display display = getWindowManager().getDefaultDisplay();
screenWidth = display.getWidth();
screenHeight = display.getHeight();
这也没有:
Point size = new Point();
getWindowManager().getDefaultDisplay().getSize(size);
screenWidth = size.x;
screenHeight = size.y;
也没有:
Point size = new Point();
getWindowManager().getDefaultDisplay().getRealSize(size);
screenWidth = size.x;
screenHeight = size.y;
这不起作用:
Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
display.getMetrics(metrics);
// since SDK_INT = 1;
screenWidth = metrics.widthPixels;
screenHeight = metrics.heightPixels;
try
{
// used when 17 > SDK_INT >= 14; includes window decorations (statusbar bar/menu bar)
screenWidth = (Integer) Display.class.getMethod("getRawWidth").invoke(display);
screenHeight = (Integer) Display.class.getMethod("getRawHeight").invoke(display);
}
catch (Exception ignored)
{
// Do nothing
}
try
{
// used when SDK_INT >= 17; includes window decorations (statusbar bar/menu bar)
Point realSize = new Point();
Display.class.getMethod("getRealSize", Point.class).invoke(display, realSize);
screenWidth = realSize.x;
screenHeight = realSize.y;
}
catch (Exception ignored)
{
// Do nothing
}
然后,我使用以下代码从屏幕高度中减去状态栏和菜单栏的高度:
int result = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0)
result = getResources().getDimensionPixelSize(resourceId);
screenHeight -= result;
result = 0;
if (screenHeight >= screenWidth)
resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");
else
resourceId = getResources().getIdentifier("navigation_bar_height_landscape", "dimen", "android");
if (resourceId > 0)
result = getResources().getDimensionPixelSize(resourceId);
screenHeight -= result;
在API 17上,它可以正确计算纵向状态栏和菜单栏的高度,而不能横向计算状态栏和菜单栏的高度。在API
10上,它返回0。我需要它在所有设备上运行,或者在最低API 7下运行。
android上获取屏幕高度,在Android中获取屏幕高度相关推荐
- android冻结命令,在Android上使用冻结tensorflow图中的变量
TLDR:如何在Android上使用冻结tensorflow图中的变量? 1.我想做什么 我有一个Tensorflow模型,它在多个变量中保持一个内部状态,用:state_var = tf.Varia ...
- android游戏基址,Android上可执行ELF文件中的段不能有基址
Android上可执行ELF文件中的段不能有基址 @(Android研究)[android] [TOC] 场景 我使用Android NDK的编译工具交叉编译qemu项目(编译可在Android上运行 ...
- android 上滑隐藏view,Android CoordinatorLayout + AppBarLayout(向上滚动隐藏指定的View)
在新的Android Support Library里面,新增了CoordinatorLayout, AppBarLayout等. 实现的效果: 向下滚动RecylerView,Tab会被隐藏,向上滚 ...
- sqlite如何在android上编译,如何在Android中使用SQLITE中的准备语句?
对于Android中准备好的SQLite语句,有SQLiteStatement..准备好的语句可以帮助您提高性能(特别是需要多次执行的语句),还有助于避免注入攻击.看见这篇文章就准备好的发言进行一般性 ...
- android 上传pdf文件,Android 加载PDF文件
今天按项目要求找了一个android的PDF控件,各种操作效果都非常好,在这里和大家分享一下. 用法很简单: 1.在build.gradle里面添加依赖 compile 'com.github.bar ...
- android上垂直跑马灯,android textview 垂直滚动and水平跑马灯
垂直滚动的话就挺简单的.当然了不是自动的垂直滚动.如果是自动的垂直滚动的话还需要自定义.所以如果有需求需要textview 可以垂直滚动的话,那你来这里就对了. 直接贴 代码.就是这么任性. andr ...
- 如何在Android设备上的Google Play商店中清除搜索和应用历史记录
Your Google Play Store search history includes previously searched for apps, movies, books, music, e ...
- 编译可在Android上运行的qemu user mode
前言 本文在Ubuntu 64位系统上对qemu项目进行交叉编译,并且只编译与qemu user mode有关的代码. 下文中的"NDK"若无特殊说明均指"Android ...
- android通过c调用shmat函数,编译可在Android上运行的qemu user mode
编译可在Android上运行的qemu user mode @(Android研究)[android|qemu] [TOC] 前言 本文在Ubuntu 64位系统上对qemu项目进行交叉编译,并且只编 ...
- android 英文日期格式,国际化-基于Android上用户区域设置的日期格式
当提出问题时,虽然可接受的答案是正确的,但后来却过时了. 我正在做出现代答案. java.time和ThreeTenABP DateTimeFormatter dateFormatter = Date ...
最新文章
- UTA研究团队提出首个3D点云+GAN新方法,让机器人“眼神”更犀利 | AI日报
- 在ASP.NET中使用Office Web Components (OWC)创建统计图
- 【转】python 字符编码与解码——unicode、str和中文:UnicodeDecodeError: 'ascii' codec can't decode...
- mysql服务重启后不见了_一次诡异的Mysql服务不断重启故障排查
- 云炬随笔20160914
- IOS第二天多线程-04简化单例模式
- 【openlayers】修改源码支持SLD的graphicfill属性
- html怎么查看两个块的距离,两个东西之间的距离怎么控制
- JAVA SE 基础复习-基本程序设计(1)
- 权限丢失_应用好深圳RFID智能档案密集架,杜绝档案丢失!
- dcdc升压计算器excel_DC-DC升降压芯片(MC34063A/33063)典型电路与元件参数在线计算_三贝计算网_23bei.com...
- flac转换成mp3,flac转mp3方法
- TI-DSPC6657、C6678多核开发OpenMP示例
- 生成帮助文档(html或chm格式)
- 如何进行PDF页码删除操作 删除页面的技巧有那些
- Logisticregression学习
- android tv盒子哪个好用,2020什么电视盒子最好?超良心的三大实用选购技巧
- 香帅的北大金融学课笔记 -- 房地产特辑
- 【大学生课程】《Python数据分析》课程大作业要求
- ASTM D 3801固体塑料垂直燃烧试验
热门文章
- NXP智能车竞赛笔记(室外电磁组)
- Spring Data ElasticSearch - 分布式搜索和数据分析引擎 相关操作实战流程
- 关于“Windows无法验证设备所需的驱动程序的数字签名”错误的解决方法
- 某计算机配置的内存为2GB,实测告诉你为APU分配64MB和2GB显存性能差距多大
- 安徽新华学院计算机学院官网,安徽新华学院计算机协会第十八届换届大会
- 芯片数据分析笔记【01】 | 基因芯片的基本原理
- 如何实现微信公众号批量全部用户标签管理功能
- 各种实用航测遥感数据数据免费获取,速来领取!
- 【油猴插件】用Tampermonkey来实现百度云满速下载和批量离线
- 《大数据之路:阿里巴巴大数据实践》-第3篇 数据管理篇 -第14章 存储和成本管理