I\'ve tried this....
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int fullscreenheight = metric
From the answer of Ahmed, this is full code without error:
int width = 0, height = 0;
final DisplayMetrics metrics = new DisplayMetrics();
Display display = getWindowManager().getDefaultDisplay();
Method mGetRawH = null, mGetRawW = null;
try {
// For JellyBean 4.2 (API 17) and onward
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
display.getRealMetrics(metrics);
width = metrics.widthPixels;
height = metrics.heightPixels;
} else {
mGetRawH = Display.class.getMethod("getRawHeight");
mGetRawW = Display.class.getMethod("getRawWidth");
try {
width = (Integer) mGetRawW.invoke(display);
height = (Integer) mGetRawH.invoke(display);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} catch (NoSuchMethodException e3) {
e3.printStackTrace();
}
I found this hidden treasure for ICS ONLY......if you're targeting API's higher than ICS see the comment by Chris Schmich below.
How to hide and display the navigation bar on Android ICS build
In case the link dies....here's how to get the actual device screen size.....
Display display = getWindowManager().getDefaultDisplay();
Method mGetRawH = Display.class.getMethod("getRawHeight");
Method mGetRawW = Display.class.getMethod("getRawWidth");
int rawWidth = (Integer) mGetRawW.invoke(display);
int rawHeight = (Integer) mGetRawH.invoke(display);
EDIT (11/19/12)
The above code WILL NOT WORK on Android 4.2 and an exception will be thrown....I have yet to find a way to get the full screen size of a device in Android 4.2. When I do, I will edit this answer, but for now, you should code with contingency for android 4.2!!
You can use getRealSize to get the screen resolution. It's officially supported in API 17 and higher, but it actually existed in the SDK since API 14. If you use the SDK platform for API 17 or higher, you can access the method normally and just bypass the warning about it only being available in API 17.
/**
* Gets the device's native screen resolution rotated
* based on the device's current screen orientation.
*/
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) //To remove warning about using
//getRealSize prior to API 17
private Point screenResolution() {
WindowManager windowManager =
(WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = windowManager.getDefaultDisplay();
Point screenResolution = new Point();
if (Build.VERSION.SDK_INT < 14)
throw new RuntimeException("Unsupported Android version.");
display.getRealSize(screenResolution);
return screenResolution;
}
I've tested this in a real Android 5.0.2 device and an emulator running 4.1.1 (and possibly others).
Thanks to benc for pointing this out in the comments.
public static Point getRealSize(Display display) {
Point outPoint = new Point();
Method mGetRawH;
try {
mGetRawH = Display.class.getMethod("getRawHeight");
Method mGetRawW = Display.class.getMethod("getRawWidth");
outPoint.x = (Integer) mGetRawW.invoke(display);
outPoint.y = (Integer) mGetRawH.invoke(display);
return outPoint;
} catch (Throwable e) {
return null;
}
}
public static Point getSize(Display display) {
if (Build.VERSION.SDK_INT >= 17) {
Point outPoint = new Point();
DisplayMetrics metrics = new DisplayMetrics();
display.getRealMetrics(metrics);
outPoint.x = metrics.widthPixels;
outPoint.y = metrics.heightPixels;
return outPoint;
}
if (Build.VERSION.SDK_INT >= 14) {
Point outPoint = getRealSize(display);
if (outPoint != null)
return outPoint;
}
Point outPoint = new Point();
if (Build.VERSION.SDK_INT >= 13) {
display.getSize(outPoint);
} else {
outPoint.x = display.getWidth();
outPoint.y = display.getHeight();
}
return outPoint;
}
Try this
final DisplayMetrics metrics = new DisplayMetrics();
Display display = getWindowManager().getDefaultDisplay();
Method mGetRawH = null,mGetRawW = null;
try {
// For JellyBeans and onward
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN){
display.getRealMetrics(metrics);
realWidth = metrics.widthPixels;
realHeight = metrics.heightPixels;
}else{
mGetRawH = Display.class.getMethod("getRawHeight");
mGetRawW = Display.class.getMethod("getRawWidth");
try {
realWidth = (Integer) mGetRawW.invoke(display);
realHeight = (Integer) mGetRawH.invoke(display);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
On some devices, e.g. tablets, the navigation bar can't be hidden at all (source, see section 'Controls for system UI visibility') because there's no hardware buttons as backup. If on your device you've managed to hide the bar though, you could make a full screen View and request its size with getWidth() and getHeight().
As far as I know, there isn't a reliable way to get the screen size on all ICS devices.