美文网首页
Android尺寸相关

Android尺寸相关

作者: 我叫陆大旭 | 来源:发表于2018-03-13 15:20 被阅读17次

    概念

    屏幕尺寸

    按屏幕对角测量的实际物理尺寸。
    为简便起见,Android 将所有实际屏幕尺寸分组为四种通用尺寸:小、 正常、大和超大。

    屏幕密度

    屏幕物理区域中的像素量;通常称为 dpi(每英寸 点数)。例如, 与“正常”或“高”密度屏幕相比,“低”密度屏幕在给定物理区域的像素较少。
    为简便起见,Android 将所有屏幕密度分组为六种通用密度: 低、中、高、超高、超超高和超超超高。

    方向

    从用户视角看屏幕的方向,即横屏还是 竖屏,分别表示屏幕的纵横比是宽还是高。请注意, 不仅不同的设备默认以不同的方向操作,而且 方向在运行时可随着用户旋转设备而改变。

    分辨率

    屏幕上物理像素的总数。添加对多种屏幕的支持时, 应用不会直接使用分辨率;而只应关注通用尺寸和密度组指定的屏幕 尺寸及密度。

    密度无关像素 (dp)

    在定义 UI 布局时应使用的虚拟像素单位,用于以密度无关方式表示布局维度 或位置。
    密度无关像素等于 160 dpi 屏幕上的一个物理像素,这是 系统为“中”密度屏幕假设的基线密度。在运行时,系统 根据使用中屏幕的实际密度按需要以透明方式处理 dp 单位的任何缩放 。dp 单位转换为屏幕像素很简单: px = dp * (dpi / 160)。 例如,在 240 dpi 屏幕上,1 dp 等于 1.5 物理像素。在定义应用的 UI 时应始终使用 dp 单位 ,以确保在不同密度的屏幕上正常显示 UI。

    常用单位

    • px:pixel,像素,电子屏幕上组成一幅图画或照片的最基本单元
    • pt: point,点,印刷行业常用单位,等于1/72英寸
    • ppi: pixel per inch,每英寸像素数,该值越高,则屏幕越细腻
    • dpi: dot per inch,每英寸多少点,该值越高,则图片越细腻
    • dp: dip,Density-independent pixel, 是安卓开发用的长度单位,1dp表示在屏幕像素点密度为160ppi时1px长度
    • sp: scale-independent pixel,安卓开发用的字体大小单位。

    注:字体的大小用也有用dp的,看需求。
    注:不同的方法单位不同。TextView.setTextSize()默认是单位是sp,TextView.setPadding()默认是px。

    转换

    public class DisplayUtil {
    
        /**
         * 将px值转换为dip或dp值,保证尺寸大小不变
         */
        public static int px2dip(Context context, float pxValue) {
            final float scale = context.getResources().getDisplayMetrics().density;
            return (int) (pxValue / scale + 0.5f);
        }
    
        /**
         * 将dip或dp值转换为px值,保证尺寸大小不变
         *
         * @return
         */
        public static int dip2px(Context context, float dipValue) {
            final float scale = context.getResources().getDisplayMetrics().density;
            return (int) (dipValue * scale + 0.5f);
        }
    
        /**
         * 将px值转换为sp值,保证文字大小不变
         */
        public static int px2sp(Context context, float pxValue) {
            final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
            return (int) (pxValue / fontScale + 0.5f);
        }
    
        /**
         * 将sp值转换为px值,保证文字大小不变
         */
        public static int sp2px(Context context, float spValue) {
            final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
            return (int) (spValue * fontScale + 0.5f);
        }
    }
    

    转换的原理

    Dimension

    1.最低4位为单位
    2.4-7位为radix
    3.其他的24位为数值

    比如10dp

    六种通用的密度

    ldpi mdpi hdpi xhdpi xxhdpi xxxhdpi
    120px 160dpi(基准) 240dpi 360dpi 480dpi 640dpi
    3 4 6 8 12 16
    240*320 320*480 480*800 720*1280 1080*1920

    图标大小

    Launcher Icons
    Menu Icons

    ldpi (120 dpi) mdpi (160 dpi) hdpi (240 dpi) xhdpi (320 dpi) xxhdpi (480 dpi) xxxhdpi (640 dpi)
    36px 48px 72px 96px 144px 192px

    Action Bar Icons
    Status Bar Icons

    ldpi (120 dpi) mdpi (160 dpi) hdpi (240 dpi) xhdpi (320 dpi) xxhdpi (480 dpi) xxxhdpi (640 dpi)
    18px 24px 36px 48px 72px 96px

    drawable和mipmap区别


    drawable中图片和不同设备上的换算

    如果放在mdpi文件下的图大小为160像素,那么在hdpi设备上就是240,在xhdpi设备上就是320像素。


    字号和高度的换算

    如果是以dp为单位,那么12dp在设备上的高度就是12dp。
    如果是以sp为单位,那么12sp在设备上的高度就是(12*scaledDensity)dp。
    如果是以px为单位,那么当然不会以px为单位。

    相关文章

      网友评论

          本文标题:Android尺寸相关

          本文链接:https://www.haomeiwen.com/subject/fcurnxtx.html