您的位置:首页 > 移动开发 > Android开发

Android“一万种”获取屏幕分辨率的方法以及px、dp转换

2017-07-21 11:20 651 查看
目录:
    1.“一万种”获取屏幕分辨率的方法

    2.px、dp之间的转换

1.“一万种”获取屏幕分辨率的方法

    1.1 概述:

            获取宽高的方法大体可以分为3种:(1) getWindowManager法; (2)getSystemService(Context.WINDOW_SERVICE)法;(3)getResources法;这3种方法其中getWindowManager()只能在当前Acitivity中调用,因为它仅仅是归属于Activity类的方法,而getSystemService()和getResources()方法即是归属于Activity,也是归属于Context类的方法;所以他们两者可以在非activity中调用。

           在这3中方法中我们又可以通过Display.getWidth()/getHeight()、display.getSize(outSize)和DisplayMetrics去获取宽高,下面贴出我总结的获取方法。 

    1.2 获取方法代码


package com.andy.phonesize;


import android.content.Context;

import android.content.pm.PackageManager;

import android.content.res.Resources;

import android.graphics.Point;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.util.DisplayMetrics;

import android.util.Log;

import android.view.Display;

import android.view.WindowManager;


public class MainActivity extends AppCompatActivity {


private final static String TAG="Size";


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);


methodDisplayGet();

methodTwoDisplayGet();

MetricsGet();

ResourcesGet();

displayGetSizeGet();


}


public void methodDisplayGet(){



WindowManager windowManager= (WindowManager) MainActivity.this.getSystemService(Context.WINDOW_SERVICE);


// getWidth()和getHeight() 在API13就弃用了 用getSize()替换

int w=windowManager.getDefaultDisplay().getWidth();

int h=windowManager.getDefaultDisplay().getHeight();


Log.d(TAG,"(w,h)=("+w+","+h+")");

}



public void methodTwoDisplayGet(){


WindowManager windowManager=this.getWindowManager();

int w=windowManager.getDefaultDisplay().getWidth();

int h=windowManager.getDefaultDisplay().getHeight();


Log.d(TAG,"(w,h)=("+w+","+h+")");

}


/*

* 用

* */

public void displayGetSizeGet(){


//通过getBaseContext()获取到当前上下文

WindowManager wm = (WindowManager) getBaseContext().getSystemService(

Context.WINDOW_SERVICE);


//获取到display并通过getSize()去获取宽高

Display display = wm.getDefaultDisplay();

Point outSize = new Point();

display.getSize(outSize);

int w= outSize.x;

int h= outSize.y;


Log.d("displayGetSizeGet "+TAG,"(w,h)=("+w+","+h+")");

}


/*

* 通过Display.getMetrics(metrics)去获取宽高

* */

public void MetricsGet(){


//通过DisplayMetrics获取宽高

WindowManager manager=getWindowManager();

DisplayMetrics metrics=new DisplayMetrics();

manager.getDefaultDisplay().getMetrics(metrics);

int w=metrics.widthPixels;

int h=metrics.heightPixels;


Log.d(TAG,"(w,h)=("+w+","+h+")");

}


/*

*通过Resources获取DisplayMetrics再获取宽高

* */

public void ResourcesGet(){


//可以通过Context和AppCompatActivity去获取Resources

//Resources resources=getResources();

Resources resources=getBaseContext().getResources();

DisplayMetrics dm=resources.getDisplayMetrics();


//平方英寸的像素数 (像素比例)p

float density=dm.density;


//每英寸像素数

float densityDpi=dm.densityDpi;


Log.d(TAG,"density="+density+",densityDpi="+densityDpi);


float x=dm.xdpi;

float y=dm.ydpi;


Log.d(TAG,"(x,y)=("+x+","+y+")");


int w=dm.widthPixels;

int h=dm.heightPixels;


Log.d(TAG,"(w,h)=("+w+","+h+")");

}

}


2.px和dip的相互转换

    2.1 px转dip


public int px2dip(Context context,float pxValue){


//方法一:通过WindowManager和DisplayMetrics去获取density

DisplayMetrics outMetrics=new DisplayMetrics();

((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay().getMetrics(outMetrics);

// float density=outMetrics.density;


// 方法二:通过getResources().getDisplayMetrics().density获取density

float density=context.getResources().getDisplayMetrics().density;



//返回值加0.5f的原因在于保证转换后的不失去精准度

return (int)(pxValue/density+0.5f);

}



    2.2 dip转px


public int dip2px(Context context,float dipValue){


//方法一:通过WindowManager和DisplayMetrics去获取density

DisplayMetrics outMetrics=new DisplayMetrics();

((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay().getMetrics(outMetrics);

// float density=outMetrics.density;


// 方法二:通过getResources().getDisplayMetrics().density获取density

float density=context.getResources().getDisplayMetrics().density;



//返回值加0.5f的原因在于保证转换后的不失去精准度

return (int)(dipValue*density+0.5f);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐