public void getSoftwareHeight() {
final Context context = getApplicationContext();
final LinearLayout parentLayout = findViewById(R.id.public_chat_parent);
final View myLayout = getWindow().getDecorView();
parentLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
int statusBarHeight;
@Override
public void onGlobalLayout() {
Rect r = new Rect();
// r will be populated with the coordinates of your view that area still visible.
parentLayout.getWindowVisibleDisplayFrame(r);
int screenHeight = myLayout.getRootView().getHeight();
int heightDiff = screenHeight - (r.bottom - r.top);
if (heightDiff > 100)
// if more than 100 pixels, its probably a keyboard
// get status bar height
statusBarHeight = 0;
try {
Class<?> c = Class.forName("com.android.internal.R$dimen");
Object obj = c.newInstance();
Field field = c.getField("status_bar_height");
int x = Integer.parseInt(field.get(obj).toString());
statusBarHeight = context.getResources().getDimensionPixelSize(x);
} catch (Exception e) {
e.printStackTrace();
}
int realKeyboardHeight = heightDiff - statusBarHeight;
Log.d("height","keyboard height = " + realKeyboardHeight);
}
});
}