Android屏幕适配


前言:本来准备好的素材不小心删除了,所以这里就只能简单的描述一下了!

1、Android中DisplayMetrics类记录了屏幕的基本信息,通常可以使用一下方法获得


DisplayMetrics metrics  = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
// 或者
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();

该类的toString()可以看到它的组成,具体的我就不用多说了,SDK和网上一大堆解释。

public String toString() {
	return "DisplayMetrics{density=" + density + ", width=" + widthPixels +
            ", height=" + heightPixels + ", scaledDensity=" + scaledDensity +
            ", xdpi=" + xdpi + ", ydpi=" + ydpi + "}";
}

2、在使用DisplayMetrics获取数据的时候需要搞清楚一下几点:


1)屏幕分辨率:通俗的讲就是横竖的点。如240px * 320px

2)屏幕尺寸:屏幕对角线的长度,用inch计算。如4英寸,长宽是不定的。

3)DPI:每平方英寸显示的点。如  (240 * 320) / 1.5 * 2 = 25600。开方就是160

android默认把160作为标准,这样算出来的density为1。如果是120那density = 0.75

值得关注的是android同时也提供了几个dpi的标准:

    public static final int DENSITY_LOW = 120;

    /**
     * Standard quantized DPI for medium-density screens.
     */
    public static final int DENSITY_MEDIUM = 160;

   
    public static final int DENSITY_TV = 213;

    /**
     * Standard quantized DPI for high-density screens.
     */
    public static final int DENSITY_HIGH = 240;

    /**
     * Standard quantized DPI for extra-high-density screens.
     */
    public static final int DENSITY_XHIGH = 320;
 

所以在我们的android工程中就有ldpi、mdpi、hdpi等等。android会根据当前屏幕信息到合适的文件夹寻找图片。


3、那么这样做有什么好处呢?很显然Google在屏幕的分辨率、尺寸上建立了密度的概念,这样就可以兼顾屏不同屏幕的指标而做出相同的设计。

首先要明确的是虽然我们平时使用dip(dp)指定长度,但最终画到屏幕上的还是px,然而dp的值是通过:dp = px/density (px = dp * density)计算得来的。

如marginLeft = 20dp

在320px * 480px 和 density = 1 的设备上 px = 20 占用屏幕的 20 / 320 = 1/ 16

在480px * 800px 和 density = 1.5的设备上px = 30 占用屏幕的 30 / 480 = 1/ 16

所以看起来是一样大小的


4、density是有手机厂商自己指定的,android系统会到文件中读取,hw_lcd_density = 240等


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值