Android 适配问题:点击这里 (很详细)
总结:
px:手机的分辨率,即像素的个数
dp/dip:密度无关像素
dpi: 像素密度,即每英寸像素的个数
以320*480手机像素,160dpi的像素密度为基准,此时的1dp=1px,则此时的手机宽高为320dp*480dp(手机的宽高都以dp作为单位) 。
标准的其他像素的手机,如240×160等,其1dp=0.75px,则其宽高也为320dp*480dp。此时当手机像素不同时,用dp可以作为适配的方法,即手机宽高一致时可以用dp适配。
注:有一个320*480手机像素,但120dpi的像素密度,则此时手机的宽高为(320/0.75)dp*(480/0.75)dp,宽高不是原来的了,此时用dp不能作适配的方法。或者有一个相同像素密度但分辨率不同的手机,此时dp也不能作适配了。即手机的宽高不一致时不能用dp为单位。
解决方法:以320×160像素为基准,将其长分成320份,每份为1px,宽也是这样,定义在dimens文件中,如<dimens name="x1">1.0px</dimens>(放在values-320*160),那么其他像素如480*320则定义<dimens name="x1">1.5px</dimens>(放在values-480*320),
计算可以用一个工具:点击这里
命令如下:java -jar 文件名.jar 基准宽 基准高 额外支持尺寸1的宽,额外支持尺寸1的高_额外支持尺寸2的宽,额外支持尺寸2的高
弊端:每一个像素都要有不同的文件,要有默认的values文件下,因为对于没有生成对应分辨率文件的手机,里面采用dp为单位,则还是有可能有问题
图片适配的问题:采用nine-patch .9图自制图片达到好的拉伸效果;把最大分辨率xxhdpi的图片做好,则其他小分辨率Android会自动加载并且进行收缩,如果只有小分辨率的则大的无法拉伸
不同屏幕大小给予不同的layout文件(主要是单面板和双面板):一般来说可以直接在layout_ sw650dp等文件下分别建立相应的同名.xml文件。
存在问题:名字一样,后期维护不方便,可以用"布局别名",res/values/layout,res/values-sw600dp-land/layouts.xml 下建立.xml文件,在代码中可以引用main作为代替,检测到不同的屏幕时则加载不同的layout文件,layout文件只存在于res/layout中,两个屏幕就有两个.xml文件
<item name="main" type="layout">@layout/one </item>
注:主要用到fragment碎片,当fragment碎片两个屏幕会重复使用时,如一个新闻的App,则可以在其中判断是否有其他布局从而判断了处于哪个屏幕,进行不同的操作。
网友评论