IT技术

Android获取屏幕的宽度和高度(dp)

2019-06-24  本文已影响0人  泪X累

相信各位做Android开发的朋友们对Android手机做适配是件很烦的事。在美工里一般用的单位是px,而Android为了适配,官方提供了dp这样一个单位在布局文件里使用。但是如果要动态调整控件的大小呢?在代码里面又怎么使用dp呢?其实dp这个单位只是分辨率和像素密度的一个比值,我们只需要获取到这两个值,把他们出一下就行了,就是这么简单。废话不多说,代码贴上:

public void getAndroiodScreenProperty() {
        WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
        DisplayMetrics dm = new DisplayMetrics();
        wm.getDefaultDisplay().getMetrics(dm);
        int width = dm.widthPixels;         // 屏幕宽度(像素)
        int height = dm.heightPixels;       // 屏幕高度(像素)
        float density = dm.density;         // 屏幕密度(0.75 / 1.0 / 1.5)
        int densityDpi = dm.densityDpi;     // 屏幕密度dpi(120 / 160 / 240)
        // 屏幕宽度算法:屏幕宽度(像素)/屏幕密度
        int screenWidth = (int) (width / density);  // 屏幕宽度(dp)
        int screenHeight = (int) (height / density);// 屏幕高度(dp)


        Log.d("h_bl", "屏幕宽度(像素):" + width);
        Log.d("h_bl", "屏幕高度(像素):" + height);
        Log.d("h_bl", "屏幕密度(0.75 / 1.0 / 1.5):" + density);
        Log.d("h_bl", "屏幕密度dpi(120 / 160 / 240):" + densityDpi);
        Log.d("h_bl", "屏幕宽度(dp):" + screenWidth);
        Log.d("h_bl", "屏幕高度(dp):" + screenHeight);
    }

需要注意的是,在一个低密度的小屏手机上,仅靠上面的代码是不能获取正确的尺寸的。

比如说,一部240x320像素的低密度手机,如果运行上述代码,获取到的屏幕尺寸是320x427。

因此,研究之后发现,若没有设定多分辨率支持的话,

Android系统会将240x320的低密度(120)尺寸转换为中等密度(160)对应的尺寸,

这样的话就大大影响了程序的编码。

所以,需要在工程的AndroidManifest.xml文件中,加入supports-screens节点,如下:

     <!-- 得到屏幕正常的物理尺寸 -->
     <supports-screens
             android:smallScreens="true"
             android:normalScreens="true"
             android:largeScreens="true"
             android:resizeable="true"
             android:anyDensity="true" />

原文:https://blog.csdn.net/wangliblog/article/details/22501141

上一篇下一篇

猜你喜欢

热点阅读