2014-12-09 2 views
4

Я использовал ниже код, но некоторые разрешения, такие как Nexus 5 (lolipop - 5.0), высота и ширина устройства не возвращают действительные значения. DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics);
width = metrics.heightPixels; height = metrics.widthPixels;
Android получить высоту и ширину экрана устройства для всех разрешений

+1

Пробовал 'getApplicationContext() GetResources() getDisplayMetrics() widthPixels;'...? Средство 'DisplayMetrics metrics = getApplicationContext(). GetResources(). GetDisplayMetrics();' –

ответ

4

Я использую следующие вспомогательные функции:

private static int sScreenWidthDP = -1; 
private static int sScreenWidth = -1; 
private static int sScreenHeight = -1; 

public static int getScreenHeight(Context context) { 
     if (sScreenHeight == -1) { 
      Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
      Point size = new Point(); 
      display.getSize(size); 
      sScreenHeight = size.y; 
     } 
     return sScreenHeight; 
    } 

    public static int getScreenHeightInDp(Context context) { 
     if (sScreenHeight == -1) { 
      Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
      Point size = new Point(); 
      display.getSize(size); 
      sScreenHeight = size.y; 
     } 
     return pixelsToDp(context, sScreenHeight); 
    } 

    public static int getScreenWidthInDp(Context context) { 
     if (sScreenWidthDP == -1) { 
      Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
      Point size = new Point(); 
      display.getSize(size); 
      sScreenWidthDP = pixelsToDp(context, size.x); 
     } 
     return sScreenWidthDP; 
    } 
public static int getScreenWidth(Context context) { 
     if (sScreenWidth == -1) { 
      Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
      Point size = new Point(); 
      display.getSize(size); 
      sScreenWidth = size.x; 
     } 

     return sScreenWidth; 
    } 
public static float dpToPixels(Context context, int dp) { 
     return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics()); 
    } 

    public static int pixelsToDp(Context context, float pixels) { 
     float density = context.getResources().getDisplayMetrics().densityDpi; 
     return Math.round(pixels/(density/160f)); 
    } 
+1

Спасибо, отлично работайте. Этот ответ должен быть отмечен. –

0

Я использую следующий код, чтобы получить ширину или высоту

WindowManager wm = (WindowManager) context 
      .getSystemService(Context.WINDOW_SERVICE); 
    Display display = wm.getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 

    int height = size.y; 
    int width = size.x; 
0

Попробуйте следующим образом, она позволяет получить реальный размер устройство:

Display display = getWindowManager().getDefaultDisplay(); 
    Point size = new Point(); 
    display.getRealSize(size); 
    int width = size.x; 
    int height = size.y; 
Смежные вопросы