Android中有时需要获取屏幕的size信息以便对控件位置进行动态控制,最近做了一些研究,现在将获取屏幕大小信息的方法总结如下,可能存在一些地方理解的不全面。

1.getMetrics

DisplayMetrics dm = new DisplayMetrics();activity.getWindowManager().getDefaultDisplay().getMetrics(dm);//在没有Activity上下文时可使用如下方法,需要Context上下文//dm = context.getResources().getDisplayMetrics();int screenwidth = dm.widthPixels;// 宽度int screenheight = dm.heightPixels;// 高度

该方法获取到的是屏幕的实际大小(即屏幕的分辨率)。然而在API 11(Android 3.0)后,Google为了减少碎片化的问题统一了标准,建议删除手机的实体键。于是现在多数手机已经不再有实体按键,OptionsMenu通常被挪至右上角。但当应用的Target API设置为11或以下版本时,应用会在底部生成一个虚拟的menu按键,如果想要获取去除该按键区域的实际显示区域的信息,用以上的方法就不可行了。查找文档,android.view.Display下存在另一个函数getRealMetrics来获取实际显示区域

2.getRealMetrics(注意,该方法仅在API 17以上可用)

DisplayMetrics dm = new DisplayMetrics();activity.getWindowManager().getDefaultDisplay().getRealMetrics(dm);int displaywidth = dm.widthPixels;// 宽度int displayheight = dm.heightPixels;// 高度

该方法返回的信息去除了上面提到的虚拟按键部分(这部分被称为decor view),但是该方法获得的区域仍然包括状态栏。那么如何获取实际上真正的显示区域呢?

3.getWindow().getDecorView().getWindowVisibleDisplayFrame(Rect)

Rect rect = new Rect();activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);

通过该方法获取到的Rect就是整个实际显示的区域,也即rect.top即为状态栏的高度,screenheight - rect.bottom即为底部虚拟按键的高度。在其他部分显示区域被遮挡的情况下(例如输入的软键盘弹出时),该方法获得的区域会相应变化。

注:所有方法获得的size信息单位均为px

更多相关文章

  1. Android(安卓)NDK c调用java代码
  2. Android的Activity获取fragment和fragment的组件
  3. Android使用AudioRecord遇到的问题与解决方法
  4. Bitmap和Drawable相互转换方法
  5. Android(安卓)EventBus 源码解析
  6. android onSaveInstanceState方法 横坚屏切换
  7. 浅谈Java中Collections.sort对List排序的两种方法
  8. Python list sort方法的具体使用
  9. python list.sort()根据多个关键字排序的方法实现

随机推荐

  1. DATASET 与 DATAREADER对象有什么区别
  2. SQL数据分页查询的方法
  3. Sql Server 2016新功能之Row-Level Secur
  4. sqlserver数据库高版本备份还原为低版本
  5. MS sqlserver 2008数据库转换成2000版本
  6. SQLServer 2008数据库降级到2005低版本
  7. SqlServer高版本数据备份还原到低版本
  8. Spark SQL数据加载和保存实例讲解
  9. 如何验证会员系统中用户的邮箱是否真实存
  10. SQL server中字符串逗号分隔函数分享