• Android使用最小宽度限定符时最小宽度的计算


    Android开发中最头疼的问题之一就是兼容不同尺寸和分辨率的设备。这里推荐一篇总结的比较完整的《Android开发:最全面、最易懂的Android屏幕适配解决方案》。这篇文章对屏幕兼容的许多问题都做了详述,这里只补充一点,就是关于在使用最小宽度限定符时这个最小宽度的该如何计算。

    最小宽度限定符可以使用一个与屏幕像素密度无关为单位(dp)的数值区分出的不同设备,以应用不同的资源。如下图中values-sw600dp的sw表示最小宽度,那么600dp是如何确定的呢?

    举个例子:一般情况下我们可以容易知道设备的分辨率和尺寸的参数。比如现在有平板A(分辨率1280*720px,尺寸是8inch),手机B(分辨率1920*1080px,尺寸是5.7inch),手机C(分辨率1280*720px,尺寸是5inch)。通过下面的屏幕像素密度的计算公式,我们可以分别计算出他们的屏幕像素密度:

    平板A约为184dpi,手机B约为386dpi,手机C约为293dpi。

    接下里需要注意的是,最小宽度是不考虑横屏或竖屏的,也就是说最小宽度是设备屏幕四条边里最短的那两条边。如果需要考虑横竖屏那么可以加入屏幕方向限定符,这不在我们讨论之列。那么接下来我们取最短边的像素数,并通过下面的公式计算最小宽度(dp):

    平板A约为626dp,手机B约为448dp,手机C约为393dp。

    如上,使用600dp就可以区分出平板和手机两类设备,如果需要详细区分手机B和C可以再考虑设置sw400dp作为区分。

    理论上以上方法是成立的,但是一些定制的设备是允许修改屏幕密度和最小宽度的,比如华为手机的开发者模式,以及3288的开发板,所以,真正的最小宽度还是要靠计算获得。以下连接是计算方法

    http://landcareweb.com/questions/37447/ru-he-zhi-dao-androidshe-bei-de-zui-xiao-kuan-du-sw

    其实主要用到了以下类:

    1 DisplayMetrics dm = mActivity.getApplicationContext()
    2                     .getResources().getDisplayMetrics();
    3             float screenWidth = dm.widthPixels / dm.xdpi;
    4             float screenHeight = dm.heightPixels / dm.ydpi;

     或者更直接的方法

    Configuration config = getResources().getConfiguration();
    config.smallestScreenWidthDp

    最后一行返回dp中的SW值!

  • 相关阅读:
    教你作一份高水准的简历
    python并发
    阻塞,非阻塞,同步,异步
    python三层架构
    paramiko与ssh
    python-进程
    生产者消费者模型
    python-线程
    python-socket
    python-mysql
  • 原文地址:https://www.cnblogs.com/dongweiq/p/10487511.html
Copyright © 2020-2023  润新知