屏幕适配android

Android系统如何在多个资源文件夹下查找匹配最合适的资源:查找的原则是先找限定符目录下的资源,找不到就就近向上找,一直找不到在回来向下找,比如xhdpi的需求先找xhdpi文件资源,找不到就到xxhdpi找,找不到再到xxxhdpi找,找不到再到hdpi,找不到再到mdpi

需求xhdpi资源, xhdpi--->xxhdpi--->xxxhdpi---->hdpi--->mdpi--->ldpi--->无限定符的文件找

 

 

适配的三个因素:屏幕尺寸、屏幕分辨率、屏幕像素密度sqrt(分辨率高*分辨率高+分辨率宽*分辨率)/尺寸 ≈ 像素密度

 

 

显示分辨率就是屏幕上显示的像素个数,分辨率160×128的意思是水平方向含有像素数为160个

五种主流的像素密度(MDPI、HDPI、XHDPI、XXHDPI 和 XXXHDPI)应按照 1:1.5:2:3:4 的比例进行缩放

比如只有hdpi有一个500x500的图片,要是在xxhdpi中调用,及1.5:3,那就是1000x1000的图片

比如启动图标标准

 

手机显示像素 =  图片实际像素尺寸 × 机型DPI / 所在资源目录DPI

 

 

支持各种屏幕尺寸

1,控制View的高宽,使用wrap_content(自适应大小)、match_parent(强制扩展到父元素宽高)、weight(权重,LinearLayout特有属性),

2,

使用相对布局,禁用绝对布局

单位使用dp代替px,根据设计稿的按什么原型标注,有px转为dp,比如设计图按照720设计,那就是20px标注=10dp;

字体使用sp,sp和dp类似

 

3,使用尺寸限定符    

 

 

      比如res/layout-large较大屏幕(例如 7 英寸或更大的平板电脑)的设备上选择此布局,对于最小宽度大于等于 600 dp 的设备,系统会选择 layout-sw600dp,

 

     可使用限定符的 drawable,layout,values

 

4,使用 .9自动拉伸图片,使用非密度制约像素 dp,sp   1dp = 1px * (sqrt(a*a+b*b)/c)/160

 

 

 

 

 像素密度 假设a,b分别为两个直角边,c为斜边,由勾股定理可得出计算方式:sqrt(a*a+b*b)/c

 

 

5,最后带java代码中适配

 

 

0dpi ~ 120dpildpi
120dpi ~ 160dpimdpi
160dpi ~ 240dpihdpi
240dpi ~ 320dpixhdpi
320dpi ~ 480dpixxhdpi
480dpi ~ 640dpixxxhdpi

 

  • dp(设备独立像素)与px的转换
    因为ui设计师给你的设计图是以px为单位的,Android开发则是使用dp作为单位的,那么我们需要进行转换:

| 密度类型                | 代表的分辨率(px) | 屏幕密度(dpi)|换算(px/dp) 
| --------------------- |:-------------:| -------------------:| -------------:|
| 低密度(ldpi)              240x320                     120              1dp=0.75px
| 中密度(mdpi)           320x480                      160              1dp=1px
| 高密度(hdpi)             480x800                     240              1dp=1.5px
| 超高密度(xhdpi)        720x1280                    320             1dp=2px
| 超超高密度(xxhdpi)  1080x1920                    480            1dp=3px


sp和dp很类似但唯一的区别是,Android系统允许用户自定义文字尺寸大小(小、正常、大、超大等等),当文字尺寸是“正常”时1sp=1dp=0.00625英寸,而当文字尺寸是“大”或“超大”时,1sp>1dp=0.00625英寸。

参考:

http://www.cocoachina.com/android/20151030/13971.html

http://blog.csdn.net/dfskhgalshgkajghljgh/article/details/50564682

http://www.jianshu.com/p/ec5a1a30694b

 

PPi和Dpi的区别

  分辨率只能用来描述图片的像素信息,不能描述图片清晰度

    PPI只能用来描述屏幕的显示密度,也不能描述图片的清晰度

    DPI才能用来描述图片显示的清晰度,表示图片在屏幕上的显示效果。

 

    当图片分辨率与屏幕显示像素相同时, DPI与PPI值相等

    当图片分辨率大于屏幕显示像素时, DPI与PPI值相等,图片显示较差

    当图片分辨率小于屏幕显示像素时, DPI值< PPI值相等,图片显示正常,屏幕未达到最佳显示效果。


全屏的适配,刘海屏和虚拟按键

 

 
//显示到刘海区
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            WindowManager.LayoutParams lp = getWindow().getAttributes();
            lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
            getWindow().setAttributes(lp);
        }



//隐藏虚拟按键

        if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) {
            View view = this.getWindow().getDecorView();
            view.setSystemUiVisibility(View.GONE);
        } else if (Build.VERSION.SDK_INT >= 19) {
            View decorView = getWindow().getDecorView();
            int uiOptions =View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |  View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN;
            decorView.setSystemUiVisibility(uiOptions);
        }

 

 

屏幕适配视频

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值