Android 开发中 如何做到XML多屏幕适配?
发布网友
发布时间:2022-04-25 06:07
我来回答
共3个回答
热心网友
时间:2022-04-22 05:50
Android上面解决适配不同尺寸(分辨率)和密度的问题,主要是通过以密度分类,再加上分辨率的方式来减化适配不同尺寸屏幕的工作量.
一般来讲,屏幕分辨率越高,清晰度也应该越高,也即其密度也应该越大,否则会看起来很不清楚,比如4寸的屏幕只显示100个像素,这就近距离看电影,或者看投影仪一样,非常的粗糙和不清晰.所以,Android主要是以屏幕密度来区分不同的设备:
高密度: hdpi (High dots per inch)
中等密度: mdpi (Medium dots per inch)
低密度: ldpi (Low dots per inch)
并且布局中推荐使用密度无关单位dip或dp,来作为长度或者宽度的单位.这样,从理论上来讲,开发者只需要做:
1. 为不同的密度屏幕准备图片资源
(图片是没办法的,因为图片的长度和宽度是固定的像素值,不能够随密度变化而变化,可以强行拉伸,但图片会失真.当然也有9 Patch图片可以解决随意拉伸的问题.但普通的图片的长度和宽度是固定的.
2. 用dip作为单位来指定长度或者宽度
就可以适配所有的设备,让布局在所有的屏幕上都得到比较好的显示效果.
当然,现实的生活没有这么完美,各种设备千差万别.但是总体仍可分为这三大类,为这三大类准备好图片后,其他的只要与某一类较接近,即使稍有拉伸或失真,也不太明显,是可以接受的.所以,对于一般性的应用程序,写一个布局文件在layout中,为三种密度准备图片drawable-hdpi, drawable-mdpi, drawable-ldpi,就足以应对80%的设备.
res/
drawable-hdpi/
ic_launcher.png
drawable-mdpi/
ic_launcher.png
drawable-ldpi/
ic_launcher.png
layout/
main.xml
(这里可能有点过时了,因为现在多了xdpi,而且很多设备也是xdpi的.)
但是光以密度屏幕来分类和处理还不够.随着设备的越来越多,以及屏幕尺寸越来越大,还有就是Tablet的出现,又会出现这样的问题:设备的屏幕密度虽然不高,但其分辨率很高.举个简单的例子:iPad2的分辨率是1024x768,iPhone 4 960x640,但是iPhone 4的密度是326ppi,远大于iPad2.但是,无论密度有多高它的屏幕就那么,最多能显示960x640个像素点,一个1024*768的图片在iPad上可以看到全部,而iPhone上只能看到一大半!这也是为什么用iPad来运行iPhone上的应用程序时,只是以屏幕中间的一部分来模拟显示的原因.
对Android来说也是一样的.如此一来,即使相同的dpi,假如其屏幕尺寸非常大,那么为其准备的图片将被拉伸很大或者显示不全.UI元素也会被拉伸很长.这样并不是很好的体验.对于尺寸大的屏幕应该让其显示更多的内容,而不是把一部分元素拉伸很大.所以,很多手机安卓应用如果未经专门适配,在平板上直接使用体验将会是非常差的.
为了解决这样的问题,就还必须以屏幕尺寸来区分设备
主要有四种屏幕尺寸:small, normal, large and xlarge
这主要是配合屏幕密度来一起使用,比如,适配平板的图片:
drawable-xlarge-hdpi/ic_launcher.png
这里就要提到了密度,尺寸和分辨率的对应关系了. 屏幕分辨率是随设备变化最明显的一个,上面的二种分类方法仅是对屏幕进行的大致的一个分类.虽然屏幕分辨率与密度没有直接的关系,但是所有的设备都基本上一致的:
ldpi QVGA 240*320 0.8
mdpi HVGA 320*480 1.0
hdpi WVGA 480*800 1.5
hdpi qHD 540*960 1.5
xdpi WXGA 720*1280 2
热心网友
时间:2022-04-22 07:08
高度适配问题,最外层layout你可以采用
LinearLayout
里面包含 的控件可以将 layout_heght 设置为0dp
并且加上 layout_weight 这个属性
layout_weight表示当前这个view占当前布局的比重
比如有上面的四个文本框占总屏幕的4/5,下面一行文字占1/5
上面的的layout_weight = "4",下面的一行文字的就设置 layout_weight = "1"追问但是我有几个空间设置了 外边距 设置了外边距的空间 也可以这么做吗
追答左右边距应该是不受影响的,但是上下的边距可能需要再调整了,但是这个方法是能适配所有分辨率的。至少比显示不出来强吧
热心网友
时间:2022-04-22 08:43
哪显示不出来追问你看我发的第一张图 下面有1行文字 第二第三张 没都显示出来