屏幕的适配-新建相应分辨率文件夹

今天刚好有做到屏幕的适配,就想到对我自己所了解到一些知识做一些简单的总结。

一、概念

1.屏幕尺寸

屏幕尺寸:既屏幕对角线的长度,单位是英寸。例如手机屏幕是5.5英寸,指的就是屏幕对角线是5.5英寸。1英寸≈2.54

                  厘米,那么 5.5英寸≈13.97厘米。

Android:主流机型主要为 240x320,320x480(HVGA),480x800(WVGA), 480x854(WVGA), 540x960(qHD),  

                 640x960(DVGA),720x1280(HD), 800x1280(WXGA)。
iOS: 主流机型主要为 320x480, 640x960, 640x1136, 1024x768, 2048x1536, 这五种。

2.屏幕像素密度

像素密度:既每英寸屏幕所拥有的像素数,像素密度越大,显示画面细节就越丰富。,单位是dpi。像素密度与屏幕尺寸

                  和屏幕分辨率有关,在单一变化条件下,屏幕尺寸越小、分辨率越高,像素密度越大,反之越小。

3.屏幕分辨率

分辨率:既屏幕上显示的像素个数,单位是px,1px就是1个像素点数。分辨率160×128的意思是水平方向含有像素数为

               160个,垂直方向像素数128个。屏幕尺寸一样的情况下,分辨率越高,显示效果就越精细和细腻。

二、dp、dip、dpi、sp、px

1.dp

dp: 和dip是一样的

2.dip

             dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为 

                了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。

3.dpi

             dpi: 是dot per inch的缩写,就是每英寸的像素数,也叫做屏幕密度。这个值越大,屏幕就越清晰。Android 主流设备的 dpi 归成了四个档次,120 dpi、160 dpi、

                       240dpi、320 dpi

4.sp

            sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。

5.px

        px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。

        根据px = dip * density / 160 ( density:其实是 dpi / (160像素/英寸) 后得到的值),则当屏幕密度为160时,px = dip。并且google 建议,TextView 的字号最好使用 sp 做单位,而且查看TextView的源码可知Android默认使用sp作为字号单位。将dip作为其他元素的单位。


6.其他

          in (英寸): 屏幕的物理尺寸, 每英寸等于2.54厘米。
           mm(毫米): 屏幕的物理尺寸。
           pt (点)  : 屏幕的物理尺寸。1/72英寸。

/res
屏幕分辨率 屏幕密度 1dp
xhdpi  超高分辨率              1280*720  320 =2
hdpi   高分辨率              480*800  240 =1.5
mdpi  中等分辨率 480*320 160 =1
ldpi    低分辨率 320*240 120 =0.75

三、适配

1.根据屏幕的尺寸新建文件夹 

        在/res目录下新建适配不同手机屏幕的分辨率的文件夹

屏幕尺寸分类:: small(小尺寸), normal(正常尺寸), large(大尺寸), xlarge(超大尺寸)      


密度分类: ldpi (低密度), mdpi (中密度), hdpi (高密度),  xhdpi (超高密度)

drawable-ldpi          values-ldpi       drawable-large-hdpi

drawable-mdpi        values-mdpi     drawable-large-mdpi

drawable-hdpi         values-hdpi       drawable-large-xhdpi

drawable-xhdpi       values-xhdpi


方向分类:land(横向屏幕), port(纵向屏幕)


layout-port    layout-land

values-fi-land    values-fi-port

drawable-hdpi该图片即适用于横屏,也适用于竖屏;
drawable-hdpi该图片即适用于横屏,也适用于竖屏;
drawable-port-hdpi,当屏幕为竖屏,且为高密度时,加载此文件夹中的资源。


分辨率分类:

      (1)以分辨率来新建文件夹

320x240 values-ldpi-320x240
480x320 values-480x320
800x480 values-800x480
854x480 values-854x480
960x540 values-960x540、values-hdpi-960x540
960x640 values-960x640、values-xhdpi-960x640
1024x600 values-mdpi-1024x600
1280x720、1280x800 values-1280x720
其他 values-xhdpi-1184x768、values-xhdpi-1280x720、values-xhdpi-1920x1080

屏幕的适配-新建相应分辨率文件夹_第1张图片


      (2)以宽度来新建文件夹

           这是以最小宽度来限制,既适配该宽度以上的手机(但是适用于平板和电视)

宽度 文件夹 其他
300 values-sw300dp values-small(可以当做sw=300计算)
320 values-sw320dp values-normal(可以当做sw=320计算)
340 values-sw340dp  
360 values-sw360dp  
400 values-sw400dp  
480 values-sw480dp values-large(可以当做sw=480计算)
520 values-sw520dp  
600 values-sw600dp  
720 values-sw720dp values-xlarge(可以当做sw=720计算)

屏幕的适配-新建相应分辨率文件夹_第2张图片


2.自动生成工具

          当然,这些适配的文件夹也可以使用代码自动生成,在这里我就不作解释了,可以参考网址  http://blog.csdn.net/lmj623565791/article/details/45460089

参考http://blog.csdn.net/lmj623565791/article/details/45460089

3.在manifest里定义你的程序支持的屏幕类型

             

                                     android:smallScreens=["true" | "false"]   //是否支持小屏

                                     android:normalScreens=["true" | "false"]  //是否支持中屏

                                     android:largeScreens=["true" | "false"]   //是否支持大屏

                                     android:xlargeScreens=["true" | "false"]  //是否支持超大屏

                                      android:anyDensity=["true" | "false"]    //是否支持多种不同密度的屏幕

                                     android:requiresSmallestWidthDp=”integer”

                                     android:compatibleWidthLimitDp=”integer”

                                     android:largestWidthLimitDp=”integer”/> 

4.屏幕适配的原则

1) 在layout文件中设置控件尺寸时应采用fill_parent、wrap_content、match_parent,如果屏幕放不下了,可以使用 ScrollView(可 

    以上下拖动);但是现在要尽量使用match_parent而不是fill_parent。当然在布局中遇到设置具体的数值宽度、高度和距离时,要

    用单位dp;当遇到给字体设置大小时要用单位sp。

          具体来说,设置view的属性android:layout_width和android:layout_height的值时,wrap_content,match_parent或dp比px更 

    好,文字大小应该使用sp来定义

2) 在程序的代码中不要出现具体的像素值,应该先在dimens.xml中定义,然后再代码中引用;

   为了使代码简单,android内部使用px为单位表示控件的尺寸,但这是基于当前屏幕基础上的。为了适应多种屏幕,android建议 

    开发者不要使用具体的像素来表示控件尺寸。

3) 在XML布局中,应尽量使用LinearLayout、RelativeLayout和FrameLayout;

4) 使用 weight 权重适配

          只能用在线性控件中,比如LinearLayout。
          竖直方向上使用权重的控件高度必须为0dp(Google官方的推荐用法)
          水平方向上使用权重的控件宽度必须为0dp(Google官方的推荐用法

5)尽量使用9-patch图,可以自动的依据图片上面显示的内容被拉伸和收缩。其中在编辑的时候,灰色区域是被拉伸的,上下两个点

    控制水平方向的拉伸,左右两点控制垂直方向的拉伸

6) 横竖屏幕的切换

1、Android 应用程序支持横竖屏幕的切换,Android中每次屏幕的切换动会重启Activity,所以应该在Activity销毁(执行onPause()方

     法和 onDestroy()方法)前保存当前活动的状态;在Activity 再次创建的时候载入配置,那样,进行中的游戏就不会自动重启了!

     有的程序适合从竖屏切换到横屏,或者反过来,这个时候怎么办呢?可以在配置Activity 的地方进行如下的配置:

      android:screenOrientation="portrait"(landscape是横向,portrait是纵向)。这样就可以保证是竖屏总是竖屏了。

2、而有的程序是适合横竖屏切换的。如何处理呢?首先要在配置 Activity的时候进行如下的配置:
     
android:configChanges="keyboardHidden|orientation" , 另 外 需 要 重 写 Activity 的onConfigurationChanged方法。


参考:

http://blog.csdn.net/lmj623565791/article/details/45460089

http://blog.csdn.net/jdsjlzx/article/details/45891551







你可能感兴趣的:(Android,屏幕适配)