0%

Android开发:屏幕适配-支持不同的屏幕密度

翻自:http://developer.android.com/training/multiscreen/screendensities.html 本课程向你展示如何通过提供不同的资源和使用与分辨率无关的测量单位(除px以外的)来支持不同的屏幕密度 使用Density-independent Pixels(找不到合适的词翻,总之就是与屏幕分辨率无关的一个单位,就是dip或dp,两者是一样的) 当你设计布局时,应该避免使用绝对像素来定义距离或者尺寸。这是因为不同的屏幕有不同的像素密度,所以一样的像素值在两个不同的设备上可能会有不同的物理大小.因此,在定义大小时,总是使用dp或sp单位. 1个dp相当于160dpi下的1个物理像素,sp也一样,但它可以随着用户在系统中的设置缩放(设置-显示-字体大小),所以你在定义字体大小时,要使用sp,在不要用在定义布局上。不想字段随着设置变,都用dp. 使用dp而不是px指定两个控件间的间隔:

<Button android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/clickme"
    android:layout_marginTop="20dp" />

定义字体大小时,使用sp

<TextView android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textSize="20sp" />

提供几套不同尺寸的图片 因为Adroid设备的多样性,你应该为大多数常见的屏幕密度(low, medium, high,extra-high)提供合适的图片资源,对应ldpi,mdpi,hdpi,xhdpi.这会让你的应用在所有的屏幕密度上有比较好的显示效果和性能。 先根据下表的比例创建不同分辨率的图片 xhdpi: 2.0 hdpi: 1.5 mdpi: 1.0 (基准) ldpi: 0.75 这意味着,如果你要在xhdpi的设备上使用200x200的图片,你要给hdpi创建150x150,mdpi创建100x100,ldpi创建75*75的同样图片。 然后,把这些图片放到各自对应目录下,系统会自动根据屏幕密度选择。 MyProject/ res/ drawable-xhdpi/ awesomeimage.png drawable-hdpi/ awesomeimage.png drawable-mdpi/ awesomeimage.png drawable-ldpi/ awesomeimage.png 当你使用 @drawable/awesomeimage引用图片时,系统会选择合适的图片