栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

android获取屏幕分辨率的方法;获取到分辨率(垂直方向像素)的不正确;heightPixels值不正确

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

android获取屏幕分辨率的方法;获取到分辨率(垂直方向像素)的不正确;heightPixels值不正确

android获取屏幕分辨率的正确方法;获取到分辨率(垂直方向像素)的不正确;heightPixels值不正确

最近由于工作需要,我想通过程序显示android设备的屏幕分辨率,然后我就去网上找了一圈,通过整理得到以下三种获取屏幕分辨率的方法:

第一种方法:

    public static String getDeviceResolution1(Context context){
        DisplayMetrics dm=context.getResources().getDisplayMetrics();
        return dm.widthPixels+"x"+dm.heightPixels;
    }

第二种方法:

public static String getDeviceResolution2(Context context){
        //从系统服务中获取窗口管理器
        WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        DisplayMetrics dm=new DisplayMetrics();
        //从默认显示器中获取显示参数保存到dm对象中
        wm.getDefaultDisplay().getMetrics(dm);
        return dm.widthPixels+"x"+dm.heightPixels;
    }

这两种方法效果相同,获取到的值如下:

它们获取到的值都是1600x2092
不过后面我通过命令获取了设备的屏幕分辨率值,结果却不太一样:

PS:命令在这adb shell wm size

通过命令获取到的屏幕分辨率是1600x2176,很明显垂直方向像素个数(像素高度)不对,也就是说dm.heightPixels获取到的值不对,这是为什么呢?

原来 dm.heightPixels在获取的像素高度值时将状态栏的高度去掉了!因为过去的Androids设备将获取到的 heightPixels 值减去状态栏的高度就是可用高度,也就是说这个值不是真正的像素高度

所以,为了能获取到真正的像素高度,我找到了下面这种方法,

第三种方法:

public static String getDeviceResolution3(Activity activity){
        //
        final View decorView = activity.getWindow().getDecorView();
        return decorView.getWidth()+"x"+decorView.getHeight();
    }

不过这种方法需要延迟(或刷新一次),才能获取到值,所以需要在Activity添加以下代码(当然如果你有更好的方法,请忽略):

private Timer timer=new Timer();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_activity);
        Log.d("FirstActivity","方法1获取到的分辨率:"+Test.getDeviceResolution1(this));
        Log.d("FirstActivity","方法2获取到的分辨率:"+Test.getDeviceResolution2(this));
        //定时器
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                showLog3();
            }
        },300);// 延迟300毫秒后,执行一次task
    }

    private void showLog3(){
        Log.d("FirstActivity","方法3获取到的分辨率:"+Test.getDeviceResolution3(this));
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        timer.cancel();//取消任务
    }

如果你想获得真正的像素高度,可以采用第三种方法。

最后,转载请注明出处,谢谢!

参考文章:https://www.imooc.com/article/79112/

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/328969.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号