import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.graphics.Rect;
import android.os.Build;
import android.util.DisplayMetrics;
import android.view.inputmethod.InputMethodManager;
public class SoftKeyboardUtils {
/**
* 隱藏或顯示軟鍵盤
* 如果現(xiàn)在是顯示調(diào)用后則隱藏 反之則顯示
? ? * @param activity
? ? */
? ? public static void showORhideSoftKeyboard(Activity activity){
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
? ? ? ? imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
? ? }
/**
* 強(qiáng)制顯示軟鍵盤
? ? * @param activity
? ? */
? ? public static void showSoftKeyboard(Activity activity){
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
? ? ? ? imm.showSoftInput(activity.getWindow().getDecorView(),InputMethodManager.SHOW_FORCED);
? ? }
/**
* 強(qiáng)制隱藏軟鍵盤
? ? * @param activity
? ? */
? ? public static void hideSoftKeyboard(Activity activity){
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
? ? ? ? imm.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); //強(qiáng)制隱藏鍵盤
? ? }
/**
* 調(diào)用系統(tǒng)方法 強(qiáng)制隱藏軟鍵盤
? ? * @param activity
? ? */
? ? public static void hideSystemSoftKeyboard(Activity activity){
((InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
? ? }
/**
* 判斷軟鍵盤是否顯示方法
? ? * @param activity
? ? * @return
? ? */
? ? public static boolean isSoftShowing(Activity activity) {
//獲取當(dāng)屏幕內(nèi)容的高度
? ? ? ? int screenHeight = activity.getWindow().getDecorView().getHeight();
? ? ? ? //獲取View可見區(qū)域的bottom
? ? ? ? Rect rect =new Rect();
? ? ? ? //DecorView即為activity的頂級(jí)view
? ? ? ? activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
? ? ? ? //考慮到虛擬導(dǎo)航欄的情況(虛擬導(dǎo)航欄情況下:screenHeight = rect.bottom + 虛擬導(dǎo)航欄高度)
//選取screenHeight*2/3進(jìn)行判斷
? ? ? ? return screenHeight*2/3 > rect.bottom+getSoftButtonsBarHeight(activity);
? ? }
/**
* 底部虛擬按鍵欄的高度
? ? * @return
? ? */
? ? @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private static int getSoftButtonsBarHeight(Activity activity) {
DisplayMetrics metrics =new DisplayMetrics();
? ? ? ? //這個(gè)方法獲取可能不是真實(shí)屏幕的高度
? ? ? ? activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
? ? ? ? int usableHeight = metrics.heightPixels;
? ? ? ? //獲取當(dāng)前屏幕的真實(shí)高度
? ? ? ? activity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
? ? ? ? int realHeight = metrics.heightPixels;
? ? ? ? if (realHeight > usableHeight) {
return realHeight - usableHeight;
? ? ? ? }else {
return 0;
? ? ? ? }
}
}