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 获取方法代码
2.px和dip的相互转换
2.1 px转dip
2.2 dip转px
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);
}
相关文章推荐
- Android开发:获取屏幕宽和高的两种方法(px、dip、分辨率之间的关系及px与dip互相转化)
- Android开发:获取屏幕宽和高的两种方法(px、dip、分辨率之间的关系及px与dip互相转化)
- Android开发:获取屏幕宽和高的两种方法(px、dip、分辨率之间的关系及px与dip互相转化)
- Android开发:获取屏幕宽和高的两种方法(px、dip、分辨率之间的关系及px与dip互相转化)
- Android开发:获取屏幕宽和高的两种方法(px、dip、分辨率之间的关系及px与dip互相转化)
- Android开发:获取屏幕宽和高的两种方法(px、dip、分辨率之间的关系及px与dip互相转化)
- Android开发:获取屏幕宽和高的两种方法(px、dip、分辨率之间的关系及px与dip互相转化)
- Android开发:获取屏幕宽和高的两种方法(px、dip、分辨率之间的关系及px与dip互相转化)
- Android获取屏幕分辨率的三种方法
- Android获取屏幕分辨率的两种方法及比较
- android获取屏幕分辨率的两种方法
- 获取android 手机屏幕的大小以及动态设置背景图片的两种方法;
- Android获取手机屏幕宽高、状态栏高度以及字符串宽高信息的方法
- Android获取手机屏幕宽高、状态栏高度以及字符串宽高信息的方法
- android获取屏幕硬件分辨率方法
- Android系统版本以及屏幕相关参数的获取包括长宽,物理尺寸,px,dp,dpi,ppi等,
- 不同Android版本设备正确获取屏幕分辨率的通用方法
- 不同Android版本设备正确获取屏幕分辨率的通用方法
- 在Android中创建菜单项Menu以及获取手机分辨率的解决方法
- 天天记录 - Android获取屏幕尺寸,分辨率3种方法