安卓屏幕的尺寸以及换算的工具类

屏幕的大小:指屏幕对角线的长度,通常用寸来度量。

分辨率:是指手机屏幕的像素点个数,eg:720*1280就是指屏幕的分辨率,指宽有720个像素点,而高有1280个像素点

PPI:每英寸像素,又被称为DPI。它是由对角线的像素点除以屏幕的大小得到的。

系统屏幕密度:

密度                     ldpi            mdpi            hdpi            xhdpi           xxhdpi 

密度值                  120            160              240              320              480

分辨率             240*320       320*480      480*800        720*1280     1080*1920

独立像素密度dp:Android系统使用mdpi即密度值160的屏幕作为标准,这个屏幕上1px=1dp。

单位换算工具类:

package com.example.yhl.displaydemo;

import android.content.Context;
import android.util.TypedValue;

/**
 * 作者:yhl
 * 创建日期:2018/6/20 14:16
 * dp,sp 转换为px的工具类
 */
public class DisplayUtil {

    /**
     * 将px值转换为dip或dp值,保证尺寸大小不变
     *
     * @param context
     * @param pxValue
     * @return
     */
    public static int px2dip(Context context, float pxValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }

    /**
     * 将dip或dp值转换为px值,保证尺寸大小不变
     *
     * @param context
     * @param dipValue
     * @return
     */
    public static int dip2px(Context context, float dipValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dipValue * scale + 0.5f);
    }

    /**
     * 将px值转换为sp值,保证文字大小不变
     *
     * @param context
     * @param pxValue
     * @return
     */
    public static int px2sp(Context context, float pxValue) {
        final float fontscale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (pxValue / fontscale + 0.5f);
    }

    /**
     * 将sp值转换为px值,保证文字大小不变
     *
     * @param context
     * @param spValue
     * @return
     */
    public static int sp2px(Context context, float spValue) {
        final float fontscale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (spValue * fontscale + 0.5f);
    }

    /**
     * 系统TypedValue
     * @param context
     * @param dp
     * @return
     */
    public static int dp2px(Context context, int dp) {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
    }

    /**
     * 系统TypedValue
     * @param context
     * @param sp
     * @return
     */
    public static int sp2px(Context context, int sp) {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, context.getResources().getDisplayMetrics());
    }
}












你可能感兴趣的:(安卓屏幕的尺寸以及换算的工具类)