美文网首页
屏幕适配-drawable,values加载规则

屏幕适配-drawable,values加载规则

作者: 杨0612 | 来源:发表于2020-06-02 14:29 被阅读0次
1.drawable加载规则

基本原则,先加载与设备相对应dpi的资源,否则先高后低,然后是drawable-nodpi,最后是drawable。
以下流程图是以设备为xxhdpi为例描述drawable的加载流程。有一点需要注意:一定会命中其中某个dpi资源文件,要不然在编码的时候就会报错。


values加载规则.png
2.drawable资源的缩放

当设备加载的资源dpi与自身不匹配时,就会对它进行缩放。

缩放系数,设备dpi/资源所在drawable文件夹的最高dpi。(drawable文件夹对应的是一个dpi范围,xxxhdpi对应480-640)。

以500x501图片为例,放在drawable-xxhdpi文件夹下(刚好匹配我手机),并且用RGB565加载,代码如下:

        BitmapFactory.Options options=new BitmapFactory.Options();
        options.inPreferredConfig= Bitmap.Config.RGB_565;
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.a,options);
        Log.d(TAG, "bitmap height=" + bitmap.getHeight());
        Log.d(TAG, "bitmap width=" + bitmap.getWidth());

加载结果如下:


xxdpi result.png

把图片放在drawable-xxxhdpi文件夹下,用同样的代码加载,加载结果如下:


xxxdpi result.png
对比发现,图片的宽跟高都缩小了,也导致图片的所占的内存变小了。
图片放在drawable-xxxhdpi文件夹,480dpi的手机加载,
缩放因子为480/640=0.75。
值得注意,drawable-nohdpi的dpi跟设备dpi一致,即图片会原样输出,drawable文件夹跟drawable-mpdi一致,都是160dpi。
3.values加载规则

values的加载分两个方向来讨论,分别是dpi跟分辨率。如果仅仅是dpi,也就是values-xxhdpi ,values-xxxhdpi等,那么加载规格跟drawable一致,如果是分辨率,那就不一样了。

分辨率加载规则,就近加载,而且只加载低不加载高。

例如手机为1920x1080,分别有values-1910x1080、values-1930x1080、values,则会先加载values-1910x1080,不成功,直接加载values,values-1930x1080不在考虑范围内。
下面我们来验证下
我手机的参数


设备.png

分配新增values-1910x1080、values-1930x1080,两者配置不同的tv_width
参数以便区分,


1910x1080.png 1930x1080.png

通过以下代码打印控件宽度

        final ActivityMainBindingImpl viewDataBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                Log.d(TAG,"tv width="+viewDataBinding.textView.getWidth());
                Log.d(TAG,"tv heigh="+viewDataBinding.textView.getHeight());
            }
        },200);

结果如下


tv width.png

设备加载到values-1910x1080配置的参数,如果values-1910x1080没有,则加载values配置的参数。

可能有人会问,如果是values-xxhdpi-1905x1080,values-xxhdpi-1910x1080,values-xxxhdpi-1920x1080,这样该怎么加载呢?

是先考虑dpi,后考虑分辨率。1920*1080,480dpi的手机,先匹配到values-xxhdpi,紧接着匹配到values-xxhdpi-1910x1080。

以上分析有不对的地方,大家可以讨论下,互相学习哦!

相关文章

网友评论

      本文标题:屏幕适配-drawable,values加载规则

      本文链接:https://www.haomeiwen.com/subject/rqwszhtx.html