androi 适配

关于mate适配的问题

 

屏幕上拥有的像素的总数。大部分情况下分辨率都被表示为“宽度×长度”,但分辨率并不意味着屏幕长宽比。在Android系统中,程序一般并不直接处理分辨率。系统会根据屏幕本身的尺寸与密度特性,自动载入对应的资源,并把它们从逻辑像素转换成屏幕上的物理像素。以屏幕分辨率为基础,沿屏幕长宽方向排列的像素。密度较低的屏幕,在长和宽方向都只有比较少的像素,而高密度的屏幕通常则会有很多。屏幕的密度是非常重要的,举个例子,长宽以像素为单位定义的界面元素,在低密度的屏幕上会显得很大,但在高密度的屏幕上则会显得很小。因此在android布局时最好都使用DIP来定义程序的界面布局,这样可以保证你的UI在各种分辨率的屏幕上都可以正常显示。

Android系统加载资源文件时,会自动根据密度去加载对应的资源,一般低密度(120ldpi),中密度(160mdpi)高密度(240hdpi),现在随着屏幕越来越大,资源文件加入了xhdpi 和xxdpi,以应对大屏幕和高dpi的机型。但是在华为mate的机型上,屏幕的分辨率很大为1280*720,但是此时它的密度较小,根据密度转换pixels = dips * (density / 160)。华为mate 的DPI为240,因此在它上面1个DIP等于1.5个物理像素。此时在mate上加载的资源就是hdpi资源,整个布局就显得很不协调。

根据相关资料发现,系统在加载资源时会先去读取先关参数

DisplayMetrics metrics = resources.getDisplayMetrics()

Configuration configRes = resources.getConfiguration();

系统跟据这些参数来加载资源,mate的为1.5因此我们可以在加载资源前,临时的改变系统density这个属性,让其加载你想要加载的资源文件,此时就将density设为2.0f(在加载资源文件之前)

if(android.os.Build.VERSION.SDK_INT >= 17){

configRes.densityDpi = (int) (DESIRED_DENSITY * 160); }

Android4.0后此方法有所改变。

float desiredDensity = 2.0f;

metrics.density = desiredDensity;

metrics.xdpi = desiredDensity * 160;

metrics.ydpi = desiredDensity * 160;

metrics.densityDpi = (int) (desiredDensity * 160);

然后调用updateConfiguration将其更新,自此系统就会去加载你设置的资源文件。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值