关于Android手机屏幕宽高

获取屏幕的宽高,通常方法如下几种:

// 获取屏幕密度(一)

Display display = getActivity().getWindowManager().getDefaultDisplay();

int screenWidth = display.getWidth(); // 屏幕宽

int screenHeight = display.getHeight(); // 屏幕高
// 获取屏幕密度(二)
DisplayMetrics dm = getResources().getDisplayMetrics();
int screenWidth = dm.widthPixels; // 屏幕宽
int screenHeight = dm.heightPixels; // 屏幕高
// 获取屏幕密度(三)
DisplayMetrics dm = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
int screenWidth = dm.widthPixels; // 屏幕宽
int screenHeight = dm.heightPixels; // 屏幕高


但是这几个方法有点问题,正常的手机没毛病,但是android4.0之后有了虚拟按键,有虚拟按键的系统调用上面的方法尺寸会减去虚拟按键的尺寸,一个1080*1920的手机根据以上方法计算的高度会比1920少。

解决方法如下(计算结果就是1920):
API 17 之后提供了方法
DisplayMetrics dm = new DisplayMetrics();  
getWindowManager().getDefaultDisplay().getRealMetrics(dm);
int width = dm.widthPixels;  // 屏幕宽
int height = dm.heightPixels;  // 屏幕高

在API 17之前通过反射获取

Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics dm = new DisplayMetrics();
@SuppressWarnings("rawtypes")
Class c;
try {
    c = Class.forName("android.view.Display");
    @SuppressWarnings("unchecked")
    Method method = c.getMethod("getRealMetrics",DisplayMetrics.class);
    method.invoke(display, dm);
}catch(Exception e){
    e.printStackTrace();
}
int width = dm.widthPixels;
int height = dm.heightPixels;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值