2013-06-02 4 views
1

Я использую этот код, чтобы получить мое разрешение экрана:Android размер неправильно экран

//View v 
Context ctx = v.getContext(); 
WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE); 
Display display = wm.getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 
int width = size.x; 
int height = size.y; 

Но я получаю неправильный размер экрана:

06-03 05:25:47.861: I/Screen Size(5267): 1024x552 

Мой планшет имеет экран 7" с разрешением 1024x600 Я думаю, что недостающие 48 пикселей - это те, которые используются системной панелью, но даже скрывают ее. Я получаю этот размер экрана.

Поскольку я нахожусь на android 4.1.1 Я не могу использовать метод getRealSize(), добавленный в API17.Как я могу получить правильный размер экрана?

Обновление: Плотность моей панели не отличается от 1.0, поэтому это не дубликат вопроса. Размер должен быть правильным.

Обновление2: Работает следующий код (только для API от 13 до 16). возвращает 600x1024 так просто сделать проверку на ориентацию экрана, чтобы получить надлежащее ширина/высота

Method mGetRawW = Display.class.getMethod("getRawWidth"); 
Method mGetRawH = Display.class.getMethod("getRawHeight"); 
int nW = (Integer)mGetRawW.invoke(dp); 
int nH = (Integer)mGetRawH.invoke(dp); 

Я взял его здесь: Android DisplayMetrics returns incorrect screen size in pixels on ICS

ответ

0

Вы можете получить отображение показателей, как это

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

Для разных, отличных от densiy

Это метод, который вы можете переопределить, чтобы получить информацию об устройствах экрана, идет один раз в устройство

@Override 
public void onSizeChanged (int w, int h, int oldw, int oldh) 
{ 
super.onSizeChanged(w, h, oldw, oldh); 
screenW = w; 
screenH = h; 

scaledCardW = (int) (screenW/8); //or whatever scale you need for bitmaps 
scaledCardH = (int) (scaledCardW*1.28); 
bitmap = // load your bitmaps 

} 
+0

Я также пробовал Метрики и по-прежнему получают неправильный размер. – Vektor88

+0

Я добавил еще один вопрос о проблеме – JRowan

0

Вы не можете, но так как система бар всегда находится на нижней части экрана, вы можете использовать этот трюк, чтобы получить реальные размеры:

Display display = getWindowManager().getDefaultDisplay(); 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
int height = display.getWidth(); 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
int width = display.getWidth();