package org.qii.weiciyuan.support.utils; import org.qii.weiciyuan.support.debug.AppLogger; import org.qii.weiciyuan.support.settinghelper.SettingUtility; import android.app.Activity; import android.content.Context; import android.graphics.Rect; import android.util.DisplayMetrics; import android.view.Display; import android.view.View; import android.view.Window; import android.view.inputmethod.InputMethodManager; /** * User: qii * Date: 13-1-18 * from top to bottom:statusbar, actionbar, app content, keyboard */ public class SmileyPickerUtility { public static void hideSoftInput(View paramEditText) { ((InputMethodManager) GlobalContext.getInstance().getSystemService(Context.INPUT_METHOD_SERVICE)) .hideSoftInputFromWindow(paramEditText.getWindowToken(), 0); } public static void showKeyBoard(final View paramEditText) { paramEditText.requestFocus(); paramEditText.post(new Runnable() { @Override public void run() { ((InputMethodManager) GlobalContext.getInstance().getSystemService(Context.INPUT_METHOD_SERVICE)) .showSoftInput(paramEditText, 0); } }); } public static int getScreenHeight(Activity paramActivity) { Display display = paramActivity.getWindowManager().getDefaultDisplay(); DisplayMetrics metrics = new DisplayMetrics(); display.getMetrics(metrics); return metrics.heightPixels; } public static int getStatusBarHeight(Activity paramActivity) { Rect localRect = new Rect(); paramActivity.getWindow().getDecorView().getWindowVisibleDisplayFrame(localRect); return localRect.top; } public static int getActionBarHeight(Activity paramActivity) { //test on samsung 9300 android 4.1.2, this value is 96px //but on galaxy nexus android 4.2, this value is 146px //statusbar height is 50px //I guess 4.1 Window.ID_ANDROID_CONTENT contain statusbar int contentViewTop = paramActivity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop(); AppLogger.e("contentViewTop=" + contentViewTop); // return contentViewTop - getStatusBarHeight(paramActivity); return ThemeUtility.getDimensionPixelSize(paramActivity, android.R.attr.actionBarSize, Utility.dip2px(48)); } //below status bar,include actionbar, above softkeyboard public static int getAppHeight(Activity paramActivity) { Rect localRect = new Rect(); paramActivity.getWindow().getDecorView().getWindowVisibleDisplayFrame(localRect); return localRect.height(); } //below actionbar, above softkeyboard public static int getAppContentHeight(Activity paramActivity) { return SmileyPickerUtility.getScreenHeight(paramActivity) - SmileyPickerUtility.getStatusBarHeight(paramActivity) - SmileyPickerUtility.getActionBarHeight(paramActivity) - SmileyPickerUtility.getKeyboardHeight(paramActivity); } public static int getKeyboardHeight(Activity paramActivity) { int height = SmileyPickerUtility.getScreenHeight(paramActivity) - SmileyPickerUtility.getStatusBarHeight(paramActivity) - SmileyPickerUtility.getAppHeight(paramActivity); if (height == 0) { height = SettingUtility.getDefaultSoftKeyBoardHeight(); } SettingUtility.setDefaultSoftKeyBoardHeight(height); return height; } public static boolean isKeyBoardShow(Activity paramActivity) { int height = SmileyPickerUtility.getScreenHeight(paramActivity) - SmileyPickerUtility.getStatusBarHeight(paramActivity) - SmileyPickerUtility.getAppHeight(paramActivity); return height != 0; } }