×

五分钟掌握Android屏幕知识点

96
洪生鹏
2016.06.29 08:28* 字数 203

关于PX、PT、PPI、DPI、DP

术语 说明
PX (pixel),像素,屏幕上显示数据的最基本的点
PT (point), 点1pt=1/72英寸
PPI (pixel per inch),每英寸像素数
DPI (dot per inch),每英寸点数
DP 即dip(Density-independent pixel), 设备独立像素1dp=160dpi时1px长度

其中px, pt, dp为长度单位,ppi和dpi为密度单位

| 密度 | ldpi | mdpi |hdpi |xhdpi |xxhdpi |
| :-------------: |:-----:| :-----:| :-----:| :-----:|
| 密度值| 120| 160 |240| 320 |480 |
| 分辨率 | 240320 | 320480| 480800 |7201280 |10801920 |
| 图标大小 | 36
36 | 4848 | 7272 |9696| 144144 |

下面提供几个常用的方法

  1. 获取屏幕高度
public int getRealHeight(Activity activity) {  
    int heightPixels = 0;  
    Display display = activity.getWindowManager().getDefaultDisplay();  
    final int VERSION = Build.VERSION.SDK_INT;  
  
    if(VERSION < 13) {  
        display.getHeight();  
    }else if (VERSION == 13) {  
        try {  
            heightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(display);  
        } catch (Exception e) {  
        }  
    } else {  
        Point realSize = new Point();  
        try {  
            Display.class.getMethod("getRealSize", Point.class).invoke(display, realSize);  
            heightPixels = realSize.y;  
        } catch (Exception e) {  
        }  
    }  
    return heightPixels;  
}  
  1. 获取屏幕密度
/** 
 * 获取屏幕密度 
 * @return 
 */  
public static float getScreenDensity(Activity activity) {  
    DisplayMetrics displayMetrics = new DisplayMetrics();  
    activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);  
    return displayMetrics.density;  
}  
  1. 获取屏幕可操作区域宽度dp数目
/** 
 * 获取屏幕可操作区域宽度dp数目 
 * 
 * @param activity 
 * @return 
 */  
public static float getScreenWidthDp(Activity activity) {  
    return getScreenWidth(activity) / getScreenDensity(activity);  
} 
  1. 获取屏幕高度可操作区域dp数目
/** 
 * 获取屏幕高度可操作区域dp数目 
 * 
 * @param activity 
 * @return 
 */  
public static float getScreenHeightDp(Activity activity) {  
    return getScreenHeight(activity) / getScreenDensity(activity);  
}  
  1. 获取屏幕真实宽度dp数目
/** 
 * 获取屏幕真实宽度dp数目 
 * 
 * @param activity 
 * @return 
 */  
public static float getRealWidthDp(Activity activity) {  
    return getRealWidth(activity) / getScreenDensity(activity);  
}  
  1. 获取屏幕真实高度dp数目
/** 
 * 获取屏幕真实高度dp数目 
 * 
 * @param activity 
 * @return 
 */  
public static float getRealHeightDp(Activity activity) {  
    return getRealHeight(activity) / getScreenDensity(activity);  
} 
  1. 判断是否为平板
public static boolean isTablet(Activity activity) {  
    return isMoreThan6Inch(activity) && isScreenSizeLarge(activity);  
}
/** 
 * 判断是否大于6英寸 
 * @param activity 
 * @return 
 */  
public static boolean isMoreThan6Inch(Activity activity) {  
    return getScreenInch(activity) >= 6.0;  
}  
/** 
 * 判断设备是否为大尺寸屏幕 
 * 
 * @param context 
 * @return 
 */  
public static boolean isScreenSizeLarge(Context context) {  
    return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE;  
}  

这样关于Android屏幕知识点就算基本讲完。

Android艺术
Android艺术
2.8万字 · 9.1万阅读 · 159人关注
让开发变简单。微信公众号:aikaifa
Web note ad 1