在做android开发的时候,在res下会有drawable(-*)文件夹,如图所示
对于将何种分辨率的资源放到哪个文件夹下,对于刚刚接触android开发者来说造成一定的困扰。这些文件该怎么放?
首先,我们需要弄清一个问题----什么是dpi?
dpi是“dot per inch”的缩写,每英寸像素数。四种密度分类: ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high),一般情况下的普通屏幕:ldpi是120,mdpi是160,hdpi是240,xhdpi是320。
其次,dpi是如何计算的?
dpi=对角线的像素值/尺寸。可以通过代码获取,如下:
public class MainActivity extends Activity {
TextView tvOne, tvTwo, tvThree, tvFour;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvOne = (TextView) findViewById(R.id.one);
tvTwo = (TextView) findViewById(R.id.two);
tvThree = (TextView) findViewById(R.id.three);
tvFour = (TextView) findViewById(R.id.four);
DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int width = metric.widthPixels; // 屏幕宽度(像素)
int height = metric.heightPixels; // 屏幕高度(像素)
float density = metric.density; // 屏幕密度(0.75 / 1.0 / 1.5)
int densityDpi = metric.densityDpi; // 屏幕密度DPI(120 / 160 / 240)
&nbnbsp; tvOne.setText("屏幕宽度(像素) " + width);
tvTwo.setText("屏幕高度(像素)) " + height);
tvThree.setText("屏幕密度(0.75 / 1.0 / 1.5) " + density);
tvFour.setText("屏幕密度DPI(120 / 160 / 240) " + densityDpi);
}
}
后,系统是怎么做的?
android会根据屏幕本身的尺寸与密度特性,自动载入对应文件夹下的资源,并把它们从dip转换成屏幕上的物理像素。