必威-必威-欢迎您

必威,必威官网企业自成立以来,以策略先行,经营致胜,管理为本的商,业推广理念,一步一个脚印发展成为同类企业中经营范围最广,在行业内颇具影响力的企业。

看了半天是字体若的祸,scaledDensity会收到用户配

2019-10-20 22:33 来源:未知

前段时间,换了个27寸的4k显示器。原始分辨率下文字太小,眼睛估计得看瞎

相关笔记地址

放大dpi后,这问题,那问题,好多

1、基础概念

百度知道,淘宝,这网页文字颜色也非常的浅,看着眼睛很累人

屏幕尺寸

  • 含义:指的屏幕对角线的物理长度,单位一般采用英寸(1英寸≈2.53cm)

目前市面常见的有5.0、5.5、5.7等尺寸。

看了半天是字体若的祸

屏幕分辨率

  • 含义:屏幕纵横向的像素数量,

一般描述成屏幕的"宽x高”=AxB

  • 例子:1080x1920,即宽度方向上有1080个像素点,在高度方向上有1920个像素点

  • Android手机常见的分辨率:320x480、480x800、720x1280、1080x1920等等

暂时发现Arial与Tahoma字体,在dpi放大后,会出现这个问题

屏幕像素密度

  • 含义:每英寸长度包含的像素点数

  • 单位:dpi(dots per ich)

  • 例子:假设设备内每英寸有160个像素,那么该设备的屏幕像素密度=160dpi,这个160dpi在安卓中,也被当做一个基准的屏幕像素密度,此情况下1dp=1px,我们常用的px和dp互相转,用到的一个安卓api中的逻辑密度density在160dpi的时候,density=1,同理如果是320dpi,density=2;以此类推。

  • desity = 当前屏幕像素密度/160

  • dp = px/desity

     /**
     * px转dp
     */

    public static int px2dip(Context context, float pxValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }
  • 安卓常用的像素密度

折腾了半天,我把微软雅黑UI的字体改名,然后进PE系统替换掉。

[图片上传失败...(image-ce337a-1511836083512)]

文字颜色清晰度就上来了。就是有些难看

dp 介绍

  • 含义:density-independent pixel,叫dp或dip,与终端上的实际物理像素点无关。

  • 例子:场景:假如同样都是画一条长度是屏幕一半的线,如果使用px作为计量单位,那么在240dpi手机上设置应为240px;在160dpi的手机上应设置为160px,二者设置就不同了;如果使用dp为单位,在这两种分辨率下,160dp都显示为屏幕一半的长度。

把修改后的文件贴上来,修改了半天

sp 介绍

  • 含义:scale-independent pixels,与dp类似,但是可以根据文字大小首选项进行放缩,是设置字体大小的御用单位。

  • sp 需要注意的事项

    • 1、当修改系统字体大小时,字体大小以dp为单位时,大小不变;
    • 2、当修改系统字体大小时,字体大小以sp为单位时,大小跟随变化;

博客园最大文件限制10m,传csdn去了

[图片上传失败...(image-ca286-1511833077731)]

  • 为何会有这种差异性。

参考文章关于设置文字大小,最终会调用下面这个方法:

public static float applyDimension(int unit, float value, DisplayMetrics metrics){
    switch (unit) {    
        case COMPLEX_UNIT_PX:        
            return value;    
        case COMPLEX_UNIT_DIP://------->>dp 基于 density      
            return value * metrics.density;  
        case COMPLEX_UNIT_SP://------->>sp  基于 scaledDensity     
            return value * metrics.scaledDensity;   
        case COMPLEX_UNIT_PT:        
            return value * metrics.xdpi * (1.0f/72);    
        case COMPLEX_UNIT_IN:        
            return value * metrics.xdpi;    
        case COMPLEX_UNIT_MM:        
            return value * metrics.xdpi * (1.0f/25.4f);    
    }    
    return 0;
}

从代码上看 dp 和 sp的差别就是 density 和 scaleDensity的区别,关于这两个字段在源码中可以看到注释
scaledDensity会收到用户配置的影响,而density是基于屏幕dpi的,不会受到用户配置影响。

这也就是为什么设置sp单位时字体大小会受到用户配置系统字体的影响.

关于字体大小到底什么时候用dp 什么时候用sp

  • 使用sp会锁着系统文字的变化而呈现正相关变化,这个设计是符合安卓最初设计思想的,比如一些眼睛不好的人,可能就会把字体放大来看,如果app上的文字没有跟着变大,这可能就会影响用户体验。

  • 简单测试了下腾讯系的很多app多数页面都不会跟随系统字体大小变化,知乎会受到系统字体的影响。

  • 其中使用apktool简单查看了下qq的一些布局文件和dimens,发现字体大小,dp、sp都有引用。

  • 还有就是如果使用sp 写的话,一些注意事项。

  • 首先布局高度尽量不要写死,可以通过设置padding或者margin来控制高度,避免文字变大时候导致的展示不全的现象。

  • 相对来说对于这种适配,相对布局体验会更好一些,可以定位控件之间的相对关系,避免遮挡问题。

贴几张图:(系统设置文字变大)

比如下面的父控件限死高度的,导致展示不全、文字过大自动换行、没有设置相关关系导致的重叠。

整体来说需要根据实际需求具体调整,尽量在保证业务逻辑正常的情况下,调优展示效果。

[图片上传失败...(image-6dca82-1511833077731)]

 怪不得这坑爹的csdn现在下载资源要那么多分,上传时都不能选择0分了。

[图片上传失败...(image-2bbbab-1511833077731)]

没分的用这个软件去修改其它字体替换:FontCreator

屏幕尺寸大小、分辨率、像素密度之间的关系:

实际像素密度算法

[图片上传失败...(image-7573c4-1511833077733)]

[图片上传失败...(image-528ff3-1511833077731)]

TAG标签:
版权声明:本文由必威发布于必威-操作系统,转载请注明出处:看了半天是字体若的祸,scaledDensity会收到用户配