Android UI总结 Android 和H5 字体大小适配

1.Android字体

1. 像素:像素(pixel)为图像的基本单位,是一个抽象的采样。一般作为一个最小的显示单位内置RGB。

2.屏幕尺寸:指屏幕的物理尺寸,一般用屏幕的对角线长度表示

3.宽高比例:屏幕物理尺寸的宽高比,传统手机一般是16:9,4:3,但是全面屏的出现打破了这个局面:三星S8,三星 note8,小米mix,LGG6 是 2:1,等都是2:1的手机

4.分辨率:值得是屏幕纵行多少像素点,横行多少像素点,如1920:1080,1440:2560等

5.屏幕密度:分辨率/屏幕尺寸可以反映出手机密度。

6.dpi:Dot per inch, 每英寸像素点,可以反映屏幕清晰度。一般的,计算的方法为对角线像素值/对角线长度(屏幕尺寸)。

7.dip: Density-independent pixel,与密度无关像素,亦称为设备独立像素(Device independent pixel),是一个虚拟的像素的单元,其等价于160dpi屏幕的一个实际物理像素。 这个160dpi值得最开始的手机大小算的值

8.sp:根据屏幕密度和字体的缩放比例算出的值。

对照表参考:http://blog.csdn.net/zhaoyw2008/article/details/46008513


2.H5字体

1.任何浏览器的默认字体高度都是16px,


3.适配方法

    适配方案一:

    https://stuff.mit.edu/afs/sipb/project/android/docs/guide/webapps/targeting.html

    通过对H5页面添加这个设置(只有Android系统自带的webview带这个功能)

 <meta name="viewport" content="target-densitydpi=device-dpi, width=device-width"/>

这样设置后h5就可以获取到原生这边对应的字体大小了

    适配方式二:

    通过传递本地的字体大小缩放值,手机的物理分辨率,DP等传给前端,在通过公式:

     deviceParams[2] 是手机的屏幕宽度, deviceParams[1] 是dp

    

   通过公式获取到的数值大小适配和原生界面的字体大小一致

 

3.获取系统字体缩放值

由于系统并未提供这个api接口。于是采用了反射机制获取了系统这个类的值。

 

public static float getSystemTextScale() {
    float textScale = 1;
    // 获取系统字体大小
    try {
        Configuration mCurConfig = new Configuration();
        // 获取ActivityManagerNative类的对象activityManagerNative
        Class<?> activityManagerNative = Class.forName("android.app.ActivityManagerNative");
             /*
              * 获得可调用getConfiguration方法的对象oam(调用  getDefault方法得到的东西)
              * getMethod:获取AMN类中的getDefault方法
              * invoke:通过activityManagerNative对象调用getDefault方法
              */
        Object oam = activityManagerNative.getMethod("getDefault").invoke(activityManagerNative);
        // 获取getConfiguration方法并通过oam对象调用,得到config对象
        Object config = oam.getClass().getMethod("getConfiguration").invoke(oam);
        mCurConfig.updateFrom((Configuration) config);
        textScale  = mCurConfig.fontScale;
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return textScale;
}

 

 

 

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MatrixData

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值