Skip to content

Instantly share code, notes, and snippets.

@hamakn
Created April 6, 2015 02:41
Show Gist options
  • Star 88 You must be signed in to star a gist
  • Fork 20 You must be signed in to fork a gist
  • Save hamakn/8939eb68a920a6d7a498 to your computer and use it in GitHub Desktop.
Save hamakn/8939eb68a920a6d7a498 to your computer and use it in GitHub Desktop.
Android: Get height of status, action, navigation bar (pixels)
// status bar height
int statusBarHeight = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
statusBarHeight = getResources().getDimensionPixelSize(resourceId);
}
// action bar height
int actionBarHeight = 0;
final TypedArray styledAttributes = getActivity().getTheme().obtainStyledAttributes(
new int[] { android.R.attr.actionBarSize }
);
actionBarHeight = (int) styledAttributes.getDimension(0, 0);
styledAttributes.recycle();
// navigation bar height
int navigationBarHeight = 0;
int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
navigationBarHeight = resources.getDimensionPixelSize(resourceId);
}
@avetharun
Copy link

JNI translation for getting status bar height: (tested with a NativeActivity app)

static int AndroidStatusBarShown(int* height = NULL) {
    JNIEnv* jni;
    g_App->activity->vm->AttachCurrentThread(&jni, NULL);
    bool state = false;
    jclass cls = jni->GetObjectClass(g_App->activity->clazz);
    jmethodID getResourcesMID = jni->GetMethodID(cls, "getResources", "()Landroid/content/res/Resources;");
    jobject resources = jni->CallObjectMethod(g_App->activity->clazz, getResourcesMID);
    jclass resources_cls = jni->GetObjectClass(resources);
    jmethodID getIDMID = jni->GetMethodID(resources_cls, "getIdentifier", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I");
    jmethodID getDimensionPixelSizeMID = jni->GetMethodID(resources_cls, "getDimensionPixelSize", "(I)I");
    jstring id0 = jni->NewStringUTF("status_bar_height");
    jstring id1 = jni->NewStringUTF("dimen");
    jstring id2 = jni->NewStringUTF("android");
    /*get the resource id for the status bar */
    jint resid = jni->CallIntMethod(resources, getIDMID, id0, id1, id2);
    int pxheight = 0;
    if (resid > 0) {
        pxheight = jni->CallIntMethod(resources, getDimensionPixelSizeMID, resid);
        /*get status bar height*/
    }
    if (height != NULL) {
        *height = pxheight;
    }
    jni->DeleteLocalRef(id0);
    jni->DeleteLocalRef(id1);
    jni->DeleteLocalRef(id2);
    g_App->activity->vm->DetachCurrentThread();
    return pxheight > 0;
}
static int AndroidStatusBarHeight() {
    int out;
    AndroidStatusBarShown(&out);
    return out;
}

@arab-ware
Copy link

How you found these identifiers? Plz if you can share.

You can read the android open source project , it contains the java & xml files of the whole system

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment