px --> dp sp
dp 是密度无关像素的意思,也被称作 dip,和 px 相比,它在不同密度的屏幕中的显示比例将保持一致。
sp 是可伸缩像素的意思,它采用了和 dp 同样的设计理念,解决了文字大小的适配问题。
密度:Android 中的密度就是屏幕每英寸所包含的像素数,通常以 dpi 为单位。
计算屏幕密度:
如:
屏幕尺寸(英寸):宽=2;长=3
屏幕分辨率 :320 * 480
屏幕密度 = 320/2 = 480/3 = 开方(320320 + 480480)/开方(22 + 33) = 160dpi
密度值越高的屏幕显示的效果就越精细
120左右:ldpi
160左右:mdpi
240左右:hdpi
320左右:xdpi
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
float xdpi = getResources().getDisplayMetrics().xdpi;
float ydpi = getResources().getDisplayMetrics().ydpi;
Log.d("MainActivity", "xdpi is " + xdpi);
Log.d("MainActivity", "ydpi is " + ydpi);
}
}
根据 Android 的规定,在 160dpi 的屏幕上,1dp 等于 1px,而在 320dpi 的屏幕上,1dp就等于 2px。
因此,使用 dp 来指定控件的宽和高就可以保证控件在不同密度的屏幕中的显示比例保持一致。
《第一行代码–Android》第四章UI的读书笔记。4-单位和尺寸