android ui适配大字体,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

12af446034c610115ed4575a3fd79d40.png

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

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;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值