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