Android多屏幕适配方案

一:图片的适配:

1、图片的自适配:1)明确哪些资源文件在不同分辨率的设备存在显示问题(图片上带文字-->底图和文字分开给(文字用textview),图片上带图标-->图标和底图分开给(2张图))。2)学会使用9-patch,一般提供hdpi大小的图片,并制作为9-patch格式,此时的拉伸在mdpi、ldpi上基本都不会带来问题。

2、对不同密度的屏幕提供不同的图片,把图片资源放在新建的不同文件夹下:

Android有个自动匹配机制去选择对应的布局和图片资源。系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。需要在AndroidManifest.xml里面添加下面一段,没有这一段自适应就不能实现:
</application>     
  <supports-screens android:largeScreens="true"     
 android:normalScreens="true" 
  android:anyDensity = "true"/>  
 </manifest> 

不指定精准分辨率
            屏幕密度区分
                drawable-ldpi低分辨率的图片,如QVGA (240x320) 
                drawable-mdpi中等分辨率的图片,如HVGA (320x480)  
                drawable-hdpi高分辨率的图片,如WVGA (480x800),FWVGA (480x854) 
                drawable-xdpi至少960dp x 720dp 
                o
            屏幕总像素区分
                drawable-small(屏幕尺寸小于3英寸左右的布局)
                drawable-normal(屏幕尺寸小于4.5英寸左右)
                drawable-large(4英寸-7英寸之间)
                drawable-xlarge(7-10英寸之间)

指定精准分辨率
            列表
                drawable-hdpi-960x540
                drawable-hdpi-854x480
                drawable-hdpi-800x480
                drawable-mdpi-480x320
               drawable-ldpi-320x240
            注意:
                a. 较大的数字要写在前面:比如drawable-854x480而不能写drawable-480x854. 
                 b.   两个数字之前是小写字母x,而不是乘号。 

二、Layout布局适配

1、 Layout自适配:layout文件中布局控件的选用 Linearlayout  layout_weight 属性活用,分配个别子控件的权重。这个属性分配一个“重要性”给子控件,并允许它扩大填补在父视图剩余的空间。子视图可以指定一个整数的重量值,然后视图中的任何剩余的空间组的比例分配给子控件。默认的权重为零
linearLayout中包含有weight的child时,linearLayout会measure两次:
在layout_width設置為fill_parent的時候,layout_weight所代表的是你的控件要優先盡可能的大,但這個大是有限度的,即fill_parent. 在layout_width設置為wrap_content的時候,layout_weight所代表的是你的控件要優先盡可能的小,但這個小是有限度的,即wrap_content.

2、对不同大小的屏幕提供不同的layout

不指定精准分辨率
            屏幕密度区分
                layout-ldpi低分辨率的图片,如QVGA (240x320) 
                layout-mdpi中等分辨率的图片,如HVGA (320x480)  
                layout-hdpi高分辨率的图片,如WVGA (480x800),FWVGA (480x854) 
                layout-xdpi至少960dp x 720dp 
            屏幕总像素区分
                layout-small(屏幕尺寸小于3英寸左右的布局)
                layout-normal(屏幕尺寸小于4.5英寸左右)
                layout-large(4英寸-7英寸之间)
                layout-xlarge(7-10英寸之间)
指定精准分辨率
            列表
                layout-hdpi-960x540
                layout-hdpi-854x480
                layout-hdpi-800x480
                layout-mdpi-480x320
                layout-ldpi-320x240
            注意:
                a. 较大的数字要写在前面:比如layout-854x480而不能写layout-480x854. 
                 b.   两个数字之前是小写字母x,而不是乘号。 

三、 对不同大小的屏幕提供不同的常用单位大小(values)

1、对不同分辨率提供不同的尺寸资源文件
不指定精准分辨率
                屏幕密度区分
                    values-ldpi低分辨率的图片,如QVGA (240x320) 
                    values-mdpi中等分辨率的图片,如HVGA (320x480)  
                    values-hdpi高分辨率的图片,如WVGA (480x800),FWVGA (480x854) 
                    values-xdpi至少960dp x 720dp 
                屏幕总像素区分
                    values--small(屏幕尺寸小于3英寸左右的布局)
                    values--normal(屏幕尺寸小于4.5英寸左右)
                    values--large(4英寸-7英寸之间)
                    values--xlarge(7-10英寸之间)
指定精准分辨率
                列表
                    values-hdpi-960x540
                    values-hdpi-854x480
                    values-hdpi-800x480
                    values-mdpi-480x320
                    values-ldpi-320x240
                注意:
                    a. 较大的数字要写在前面:比如drawable-854x480而不能写drawable-480x854. 
                     b.   两个数字之前是小写字母x,而不是乘号。

2、单位介绍

pix:像素
ppi:每英寸所拥有的像素(Pixel)数目
PPI = √(长度像素数2 + 宽度像素数2) / 屏幕对角线英寸数  
sp:放大像素(主要用于字体),保证相同字号的字在不同PPI屏幕上显示的物理高度一致。

设定 PPI为 267 时,高度18sp(即 30px)的字的物理高度为 X,则: 一英寸里的像素数 267 / 一英寸里的毫米数 25.4mm = 30 / X X ≈ 2.86mm

设定 PPI为 160 时,高度18sp(即 18px)的字的物理高度为 Y,则: 一英寸里的像素数 160 / 一英寸里的毫米数 25.4mm = 18 / Y Y ≈ 2.86mm
dp:设备独立像素,dip * density / 160,则当屏幕密度为160时,px = dip

3、在创建的列表文件夹中分别创建dimens.xml <dimen name="Text_size">30sp</dimen>


四、获取屏幕px

screenWidth = getWindowManager().getDefaultDisplay().getWidth();          
screenHeight = getWindowManager().getDefaultDisplay().getHeight();  
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int width = metrics.widthPixels;
int height = metrics.heightPixels;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值