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带这个功能)

 

这样设置后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. 【凯子哥带你夯实应用层】Android的Google官方设计指南(上)
  2. Android(安卓)酷炫来袭:制作属于你自己的音频播放器(综合运用Media
  3. 牛逼的Android(安卓)UI--第18章 与用户交互相关的设计模式 (中)
  4. Android获取不同手机 自身存储和外置SD卡存储路径的解决方案
  5. Android(安卓)如何获取应用签名,微信需要的签名是MD5还是SHA1?
  6. Android(安卓)View获取坐标值、相对距离的方法
  7. 浅析android适配器adapter中的那些坑
  8. Android(安卓)Studio获取开发版SHA1值和发布版SHA1值的史上最详
  9. [置顶] Android中获取缓存大小和清除缓存功能

随机推荐

  1. Android(安卓)Service的onRebind方法调用
  2. Android中FloatingActionButton的基本使
  3. Android的内存机制
  4. Android 开发中使用 SQLite 数据库
  5. Android性能分析
  6. Android 安全攻防(一):SEAndroid的编译
  7. android 项目工程文件夹(zhuan)
  8. 安卓控件之图片控件(ImagView)
  9. Android(安卓)Init进程源码分析
  10. [Android]仿Windows Phone的启动器,无广告