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

来源:互联网 发布:wifi网络电话软件 编辑:程序博客网 时间:2024/05/21 17:18
目录:
    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 获取方法代码
  1. package com.andy.phonesize;
  2. import android.content.Context;
  3. import android.content.pm.PackageManager;
  4. import android.content.res.Resources;
  5. import android.graphics.Point;
  6. import android.support.v7.app.AppCompatActivity;
  7. import android.os.Bundle;
  8. import android.util.DisplayMetrics;
  9. import android.util.Log;
  10. import android.view.Display;
  11. import android.view.WindowManager;
  12. public class MainActivity extends AppCompatActivity {
  13. private final static String TAG="Size";
  14. @Override
  15. protected void onCreate(Bundle savedInstanceState) {
  16. super.onCreate(savedInstanceState);
  17. setContentView(R.layout.activity_main);
  18. methodDisplayGet();
  19. methodTwoDisplayGet();
  20. MetricsGet();
  21. ResourcesGet();
  22. displayGetSizeGet();
  23. }
  24. public void methodDisplayGet(){
  25. WindowManager windowManager= (WindowManager) MainActivity.this.getSystemService(Context.WINDOW_SERVICE);
  26. // getWidth()和getHeight() 在API13就弃用了 用getSize()替换
  27. int w=windowManager.getDefaultDisplay().getWidth();
  28. int h=windowManager.getDefaultDisplay().getHeight();
  29. Log.d(TAG,"(w,h)=("+w+","+h+")");
  30. }
  31. public void methodTwoDisplayGet(){
  32. WindowManager windowManager=this.getWindowManager();
  33. int w=windowManager.getDefaultDisplay().getWidth();
  34. int h=windowManager.getDefaultDisplay().getHeight();
  35. Log.d(TAG,"(w,h)=("+w+","+h+")");
  36. }
  37. /*
  38. * 用
  39. * */
  40. public void displayGetSizeGet(){
  41. //通过getBaseContext()获取到当前上下文
  42. WindowManager wm = (WindowManager) getBaseContext().getSystemService(
  43. Context.WINDOW_SERVICE);
  44. //获取到display并通过getSize()去获取宽高
  45. Display display = wm.getDefaultDisplay();
  46. Point outSize = new Point();
  47. display.getSize(outSize);
  48. int w= outSize.x;
  49. int h= outSize.y;
  50. Log.d("displayGetSizeGet "+TAG,"(w,h)=("+w+","+h+")");
  51. }
  52. /*
  53. * 通过Display.getMetrics(metrics)去获取宽高
  54. * */
  55. public void MetricsGet(){
  56. //通过DisplayMetrics获取宽高
  57. WindowManager manager=getWindowManager();
  58. DisplayMetrics metrics=new DisplayMetrics();
  59. manager.getDefaultDisplay().getMetrics(metrics);
  60. int w=metrics.widthPixels;
  61. int h=metrics.heightPixels;
  62. Log.d(TAG,"(w,h)=("+w+","+h+")");
  63. }
  64. /*
  65. *通过Resources获取DisplayMetrics再获取宽高
  66. * */
  67. public void ResourcesGet(){
  68. //可以通过Context和AppCompatActivity去获取Resources
  69. //Resources resources=getResources();
  70. Resources resources=getBaseContext().getResources();
  71. DisplayMetrics dm=resources.getDisplayMetrics();
  72. //平方英寸的像素数 (像素比例)p
  73. float density=dm.density;
  74. //每英寸像素数
  75. float densityDpi=dm.densityDpi;
  76. Log.d(TAG,"density="+density+",densityDpi="+densityDpi);
  77. float x=dm.xdpi;
  78. float y=dm.ydpi;
  79. Log.d(TAG,"(x,y)=("+x+","+y+")");
  80. int w=dm.widthPixels;
  81. int h=dm.heightPixels;
  82. Log.d(TAG,"(w,h)=("+w+","+h+")");
  83. }
  84. }

2.px和dip的相互转换
    2.1 px转dip
  1. public int px2dip(Context context,float pxValue){
  2. //方法一:通过WindowManager和DisplayMetrics去获取density
  3. DisplayMetrics outMetrics=new DisplayMetrics();
  4. ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay().getMetrics(outMetrics);
  5. // float density=outMetrics.density;
  6. // 方法二:通过getResources().getDisplayMetrics().density获取density
  7. float density=context.getResources().getDisplayMetrics().density;
  8. //返回值加0.5f的原因在于保证转换后的不失去精准度
  9. return (int)(pxValue/density+0.5f);
  10. }
    2.2 dip转px
  1. public int dip2px(Context context,float dipValue){
  2. //方法一:通过WindowManager和DisplayMetrics去获取density
  3. DisplayMetrics outMetrics=new DisplayMetrics();
  4. ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay().getMetrics(outMetrics);
  5. // float density=outMetrics.density;
  6. // 方法二:通过getResources().getDisplayMetrics().density获取density
  7. float density=context.getResources().getDisplayMetrics().density;
  8. //返回值加0.5f的原因在于保证转换后的不失去精准度
  9. return (int)(dipValue*density+0.5f);
  10. }
原创粉丝点击