您的位置:首页 > 其它

获取手机屏幕密度dpi和对应的资源文件夹

2016-06-24 16:26 246 查看
1、首先看一下像素密度对应的Android资源文件夹

dpi范围

密度
0dpi ~ 120dpildpi
120dpi ~ 160dpimdpi
160dpi ~ 240dpihdpi
240dpi ~ 320dpixhdpi
320dpi ~ 480dpixxhdpi
480dpi ~ 640dpixxxhdpi
2.效果图



3.主要的代码

<span style="font-size:18px;">private TextView mTv_xdpi;
private TextView mTv_ydpi;
private TextView mTv_dpi;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
initView();
//获取x、ydpi
getXydpi();
}
/**
* @Description:获取x、y的dpi,得到的数据,基本上是一致的
* @author  作者 :likun
* @date 创建时间:2016/6/24 16:06
* @parameter :
* @return :
*/
private void getXydpi() {
float xdpi = getResources().getDisplayMetrics().xdpi;
float ydpi = getResources().getDisplayMetrics().ydpi;
mTv_xdpi.setText(xdpi+"");
mTv_ydpi.setText(ydpi+"");
getDpi(xdpi);
}
/**
* @Description:匹配得到手机的dpi
* @author  作者 :likun
* @date 创建时间:2016/6/24 16:07
* @parameter :
* @return :
*/
private void getDpi(float xdpi) {
String dpi="";
if(xdpi>=0&&xdpi<120){
dpi="ldpi";
}else if(xdpi>=120&&xdpi<160){
dpi="mdpi";
}else if(xdpi>=160&&xdpi<240){
dpi="hdpi";
}else if(xdpi>=240&&xdpi<320){
dpi="xhdpi";
}else if(xdpi>=320&&xdpi<480){
dpi="xxhdpi";
}else if(xdpi>=480&&xdpi<640){
dpi="xxxhdpi";
}
mTv_dpi.setText(dpi);
}

/**
* @Description:初始化控件
* @author  作者 :likun
* @date 创建时间:2016/6/24 16:03
* @parameter :
* @return :
*/
private void initView() {
mTv_xdpi = (TextView) findViewById(R.id.tv_xdpi);
mTv_ydpi = (TextView) findViewById(R.id.tv_ydpi);
mTv_dpi = (TextView) findViewById(R.id.tv_dpi);
}</span>
4.开发注意事项

       比如我的手机屏幕密度是xxhdpi,那么xxhdpi文件夹下的图片就是最适合的图片。因此,如果xxhdpi文件夹下有这张图就会优先被使用,在这种情况下,图片是不会被缩放的。但是,如果xxhdpi文件夹下没有这张图时,系统就会自动去其它文件夹下找这张图了,优先会去更高密度的文件夹下找这张图片,如果还是没有资源图片,接下来会尝试再找更高密度的文件夹,发现没有更高密度的了,这个时候会去nodpi文件夹找这张图,发现也没有,那么就会去更低密度的文件夹下面找,依次是xhdpi
-> hdpi -> mdpi -> ldpi。

总体匹配规则就是这样,那么比如说现在终于在mdpi文件夹下面找到图了,但是系统会认为你这张图是专门为低密度的设备所设计的,如果直接将这张图在当前的高密度设备上使用就有可能会出现像素过低的情况,于是系统自动帮我们做了这样一个放大操作。

那么同样的道理,如果系统是在xxxhdpi文件夹下面找到这张图的话,它会认为这张图是为更高密度的设备所设计的,如果直接将这张图在当前设备上使用就有可能会出现像素过高的情况,于是会自动帮我们做一个缩小的操作。

       但实际情况是,公司的UI们通常就只会给一套图片资源,想让他们针对每种密度的设备都设计一套图片资源,并且还是按照我们上面讲的缩放比例规则来设计,就有点想得太开心了。没错,这个就是现实情况,那么在这种情况下,我们应该将仅有的这一套图片资源放在哪个密度的文件夹下呢?

      可以这样来分析,根据我们刚才所学的内容,如果将一张图片放在低密度文件夹下,那么在高密度设备上显示图片时就会被自动放大,而如果将一张图片放在高密度文件夹下,那么在低密度设备上显示图片时就会被自动缩小。那我们可以通过成本的方式来评估一下,一张原图片被缩小了之后显示其实并没有什么副作用,但是一张原图片被放大了之后显示就意味着要占用更多的内存了。因为图片被放大了,像素点也就变多了,而每个像素点都是要占用内存的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息