如何获取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中获取屏幕高度相关推荐

  1. android冻结命令,在Android上使用冻结tensorflow图中的变量

    TLDR:如何在Android上使用冻结tensorflow图中的变量? 1.我想做什么 我有一个Tensorflow模型,它在多个变量中保持一个内部状态,用:state_var = tf.Varia ...

  2. android游戏基址,Android上可执行ELF文件中的段不能有基址

    Android上可执行ELF文件中的段不能有基址 @(Android研究)[android] [TOC] 场景 我使用Android NDK的编译工具交叉编译qemu项目(编译可在Android上运行 ...

  3. android 上滑隐藏view,Android CoordinatorLayout + AppBarLayout(向上滚动隐藏指定的View)

    在新的Android Support Library里面,新增了CoordinatorLayout, AppBarLayout等. 实现的效果: 向下滚动RecylerView,Tab会被隐藏,向上滚 ...

  4. sqlite如何在android上编译,如何在Android中使用SQLITE中的准备语句?

    对于Android中准备好的SQLite语句,有SQLiteStatement..准备好的语句可以帮助您提高性能(特别是需要多次执行的语句),还有助于避免注入攻击.看见这篇文章就准备好的发言进行一般性 ...

  5. android 上传pdf文件,Android 加载PDF文件

    今天按项目要求找了一个android的PDF控件,各种操作效果都非常好,在这里和大家分享一下. 用法很简单: 1.在build.gradle里面添加依赖 compile 'com.github.bar ...

  6. android上垂直跑马灯,android textview 垂直滚动and水平跑马灯

    垂直滚动的话就挺简单的.当然了不是自动的垂直滚动.如果是自动的垂直滚动的话还需要自定义.所以如果有需求需要textview 可以垂直滚动的话,那你来这里就对了. 直接贴 代码.就是这么任性. andr ...

  7. 如何在Android设备上的Google Play商店中清除搜索和应用历史记录

    Your Google Play Store search history includes previously searched for apps, movies, books, music, e ...

  8. 编译可在Android上运行的qemu user mode

    前言 本文在Ubuntu 64位系统上对qemu项目进行交叉编译,并且只编译与qemu user mode有关的代码. 下文中的"NDK"若无特殊说明均指"Android ...

  9. android通过c调用shmat函数,编译可在Android上运行的qemu user mode

    编译可在Android上运行的qemu user mode @(Android研究)[android|qemu] [TOC] 前言 本文在Ubuntu 64位系统上对qemu项目进行交叉编译,并且只编 ...

  10. android 英文日期格式,国际化-基于Android上用户区域设置的日期格式

    当提出问题时,虽然可接受的答案是正确的,但后来却过时了. 我正在做出现代答案. java.time和ThreeTenABP DateTimeFormatter dateFormatter = Date ...

最新文章

  1. UTA研究团队提出首个3D点云+GAN新方法,让机器人“眼神”更犀利 | AI日报
  2. 在ASP.NET中使用Office Web Components (OWC)创建统计图
  3. 【转】python 字符编码与解码——unicode、str和中文:UnicodeDecodeError: 'ascii' codec can't decode...
  4. mysql服务重启后不见了_一次诡异的Mysql服务不断重启故障排查
  5. 云炬随笔20160914
  6. IOS第二天多线程-04简化单例模式
  7. 【openlayers】修改源码支持SLD的graphicfill属性
  8. html怎么查看两个块的距离,两个东西之间的距离怎么控制
  9. JAVA SE 基础复习-基本程序设计(1)
  10. 权限丢失_应用好深圳RFID智能档案密集架,杜绝档案丢失!
  11. dcdc升压计算器excel_DC-DC升降压芯片(MC34063A/33063)典型电路与元件参数在线计算_三贝计算网_23bei.com...
  12. flac转换成mp3,flac转mp3方法
  13. TI-DSPC6657、C6678多核开发OpenMP示例
  14. 生成帮助文档(html或chm格式)
  15. 如何进行PDF页码删除操作 删除页面的技巧有那些
  16. Logisticregression学习
  17. android tv盒子哪个好用,2020什么电视盒子最好?超良心的三大实用选购技巧
  18. 香帅的北大金融学课笔记 -- 房地产特辑
  19. 【大学生课程】《Python数据分析》课程大作业要求
  20. ASTM D 3801固体塑料垂直燃烧试验

热门文章

  1. NXP智能车竞赛笔记(室外电磁组)
  2. Spring Data ElasticSearch - 分布式搜索和数据分析引擎 相关操作实战流程
  3. 关于“Windows无法验证设备所需的驱动程序的数字签名”错误的解决方法
  4. 某计算机配置的内存为2GB,实测告诉你为APU分配64MB和2GB显存性能差距多大
  5. 安徽新华学院计算机学院官网,安徽新华学院计算机协会第十八届换届大会
  6. 芯片数据分析笔记【01】 | 基因芯片的基本原理
  7. 如何实现微信公众号批量全部用户标签管理功能
  8. 各种实用航测遥感数据数据免费获取,速来领取!
  9. 【油猴插件】用Tampermonkey来实现百度云满速下载和批量离线
  10. 《大数据之路:阿里巴巴大数据实践》-第3篇 数据管理篇 -第14章 存储和成本管理