android手机屏幕分辨率尺寸

android获取设备屏幕大小的方法

// 通过WindowManager获取
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
System.out.println("heigth : " + dm.heightPixels);
System.out.println("width : " + dm.widthPixels);

// 通过Resources获取
DisplayMetrics dm2 = getResources().getDisplayMetrics();
System.out.println("heigth2 : " + dm2.heightPixels);
System.out.println("width2 : " + dm2.widthPixels);

// 获取屏幕的默认分辨率
Display display = getWindowManager().getDefaultDisplay();
System.out.println("width-display :" + display.getWidth());
System.out.println("heigth-display :" + display.getHeight());

可以看到,第一、第三种方法都用到了getWindowManager()这个方法,而第二种方法没有用getWindowManager()。因为getWindowManager()这个方法是在类Activity中的,如果你自己编写的类不是继承于类Activity,那么必然在这个类中书写代码就不能用到getWindowManager()这个方法。所以当你自己编写的类不是继承于类Activity,那么就只能应用第二种方法获取手机屏幕的大小。

fragment中获取设备屏幕大小的方法

getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);

工具类

package com.example.administrator.myapplication;

import android.content.Context;
import android.util.DisplayMetrics;
import android.util.TypedValue;

/**
 * Created by Administrator on 2017/2/13.
 */

public class DensityUtil {
//    屏幕尺寸
//    屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米
//    比如常见的屏幕尺寸有2.4、2.8、3.5、3.7、4.2、5.0、5.5、6.0等

//    屏幕分辨率
//    屏幕分辨率是指在横纵向上的像素点数,单位是px,1px=1个像素点。一般以纵向像素*横向像素,如1960*1080。

//    屏幕像素密度
//    屏幕像素密度是指每英寸上的像素点数,单位是dpi,即“dot per inch”的缩写。
//    屏幕像素密度与屏幕尺寸和屏幕分辨率有关,在单一变化条件下,屏幕尺寸越小、分辨率越高,像素密度越大,反之越小。

//    dp(dip): device independent pixels(设备独立像素).
//    dip和dp是一个意思,都是Density Independent Pixels的缩写,即密度无关像素.
//    不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。
//    dp也就是dip,这个和sp基本类似。如果设置表示长度、高度等属性时可以使用dp 或sp。但如果设置字体,需要使用sp。
//    dp是与密度无关,sp除了与密度无关外,还与scale无关。如果屏幕密度为160,这时dp和sp和px是一 样的。
//            1dp=1sp=1px,但如果使用px作单位,如果屏幕大小不变(假设还是3.2寸),而屏幕密度变成了320。
//    那么原来TextView的宽度 设成160px,在密度为320的3.2寸屏幕里看要比在密度为160的3.2寸屏幕上看短了一半。
//    但如果设置成160dp或160sp的话。系统会自动 将width属性值设置成320px的。
//    也就是160 * 320 / 160。其中320 / 160可称为密度比例因子。
//    也就是说,如果使用dp和sp,系统会根据屏幕密度的变化自动进行转换。

//    px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。
//    pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用;
//    sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。即scale-independent pixels

//    px = dp*(dpi/160)

//    float scale = getResources().getDisplayMetrics().density;//密度因子
//    这个得到的不应该叫做密度,应该是密度的一个比例。不是真实的屏幕密度,而是相对于某个值的屏幕密度。也可以说是相对密度.

   
    //经测试,小米note参数分别为(获取当前屏幕的高宽):
//    mWidth = getWindowManager().getDefaultDisplay().getWidth(); //1080
//    mHeight = getWindowManager().getDefaultDisplay().getHeight(); //1920

    // 通过WindowManager获取
//    DisplayMetrics metric = new DisplayMetrics();
//    getWindowManager().getDefaultDisplay().getMetrics(metric);
//    int width = metric.widthPixels;  // 宽度(PX) 1080
//    int height = metric.heightPixels;  // 高度(PX) 1920
//    float density = metric.density;  // 密度因子(0.75 / 1.0 / 1.5) 2.75
//    int densityDpi = metric.densityDpi;  // 密度DPI(120 / 160 / 240) 440

//    float scale = getResources().getDisplayMetrics().density;//密度因子  2.75

    /**
     * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
     */
    public static int dip2px(Context context, float dpValue) {
        float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

    /**
     * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
     */
    public static int px2dip(Context context, float pxValue) {
        float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }

    /**
     * 将px值转换为sp值,保证文字大小不变
     * <p>
     * (DisplayMetrics类中属性scaledDensity)
     */
    public static int px2sp(Context context, float pxValue) {
        float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (pxValue / fontScale + 0.5f);
    }

    /**
     * 将sp值转换为px值,保证文字大小不变
     * <p>
     * (DisplayMetrics类中属性scaledDensity)
     */
    public static int sp2px(Context context, float spValue) {
        float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (spValue * fontScale + 0.5f);
    }


    /*       ==================== 我是华丽的分割线==========================             */

    /**
     * 将 dp 转换为 px
     *
     * @param dp
     * @return
     */
    private int dp2px(Context context, int dp) {//applyDimension将指定单位、指定的值转换成px单位的值。
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp,
                context.getResources().getDisplayMetrics());
    }

    /*
    * 将sp转化成px
    * */
    private int sp2px(Context context, int sp) {//applyDimension将指定单位、指定的值转换成px单位的值。
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp,
                context.getResources().getDisplayMetrics());
    }

    //applyDimension方法源码://applyDimension将指定单位、指定的值转换成px单位的值。
//    public static float applyDimension(int unit, float value,
//                                       DisplayMetrics metrics)
//    {
//        switch (unit) {
//            case COMPLEX_UNIT_PX:
//                return value;
//            case COMPLEX_UNIT_DIP:
//                return value * metrics.density;
//            case COMPLEX_UNIT_SP:
//                return value * metrics.scaledDensity;
//            case COMPLEX_UNIT_PT:
//                return value * metrics.xdpi * (1.0f/72);
//            case COMPLEX_UNIT_IN:
//                return value * metrics.xdpi;
//            case COMPLEX_UNIT_MM:
//                return value * metrics.xdpi * (1.0f/25.4f);
//        }
//        return 0;
//    }
}

DisplayMetrics源码:

   /**
     * The absolute width of the available display size in pixels.显示的绝对宽度,px单位
     */
    public int widthPixels;
    
    /**
     * The absolute height of the available display size in pixels.显示的绝对高度,px单位
     */
    public int heightPixels;


    /**
     * The logical density of the display.  This is a scaling factor for the
     * Density Independent Pixel unit, where one DIP is one pixel on an
     * approximately 160 dpi screen (for example a 240x320, 1.5"x2" screen), 
     * providing the baseline of the system's display. Thus on a 160dpi screen 
     * this density value will be 1; on a 120 dpi screen it would be .75; etc.
     *  
     * <p>This value does not exactly follow the real screen size (as given by 
     * {@link #xdpi} and {@link #ydpi}, but rather is used to scale the size of
     * the overall UI in steps based on gross changes in the display dpi.  For 
     * example, a 240x320 screen will have a density of 1 even if its width is 
     * 1.8", 1.3", etc. However, if the screen resolution is increased to 
     * 320x480 but the screen size remained 1.5"x2" then the density would be 
     * increased (probably to 1.5).
     *
     * @see #DENSITY_DEFAULT像素无关密度的缩放因子
     */
    public float density;
   
   
    /**
     * The screen density expressed as dots-per-inch.  May be either
     * {@link #DENSITY_LOW}, {@link #DENSITY_MEDIUM}, or {@link #DENSITY_HIGH}.屏幕密度,DPI:每英寸的像素点数
     */
    public int densityDpi;


    /**
     * A scaling factor for fonts displayed on the display.  This is the same
     * as {@link #density}, except that it may be adjusted in smaller
     * increments at runtime based on a user preference for the font size. 字体显示的缩放因子
     */
    public float scaledDensity;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值