package com.basic.security.utils;
|
|
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.MotionEvent;
|
import android.view.View;
|
import android.view.ViewGroup;
|
import android.view.inputmethod.InputMethodManager;
|
import android.widget.EditText;
|
|
import com.basic.security.base.BaseApplication;
|
|
public class KeyboardUtil {
|
|
|
public static void setupUI(View view) {
|
|
// Set up touch listener for non-text box views to hide keyboard.
|
if (!(view instanceof EditText)) {
|
view.setOnTouchListener(new View.OnTouchListener() {
|
public boolean onTouch(View v, MotionEvent event) {
|
KeyboardUtil.hideSoftKeyboard();
|
return false;
|
}
|
});
|
}
|
//If a layout container, iterate over children and seed recursion.
|
if (view instanceof ViewGroup) {
|
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
|
View innerView = ((ViewGroup) view).getChildAt(i);
|
setupUI(innerView);
|
}
|
}
|
}
|
|
|
public static void hideSoftKeyboard() {
|
Activity activity = BaseApplication.getApplication().activity;
|
InputMethodManager inputMethodManager =
|
(InputMethodManager) activity.getSystemService(
|
Activity.INPUT_METHOD_SERVICE);
|
View view = activity.getCurrentFocus();
|
if (view != null) {
|
inputMethodManager.hideSoftInputFromWindow(
|
view.getWindowToken(), 0);
|
}
|
}
|
|
public static void showKeyboard() {
|
InputMethodManager imm = (InputMethodManager) BaseApplication.getApplication().activity.getSystemService(Context.INPUT_METHOD_SERVICE);
|
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
|
}
|
|
public static boolean isSoftShowing(Activity activity) {
|
//获取当前屏幕内容的高度
|
int screenHeight = activity.getWindow().getDecorView().getHeight();
|
//获取View可见区域的bottom
|
Rect rect = new Rect();
|
//DecorView即为activity的顶级view
|
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
|
//考虑到虚拟导航栏的情况(虚拟导航栏情况下:screenHeight = rect.bottom + 虚拟导航栏高度)
|
//选取screenHeight*2/3进行判断
|
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();
|
//这个方法获取可能不是真实屏幕的高度
|
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
|
int usableHeight = metrics.heightPixels;
|
//获取当前屏幕的真实高度
|
activity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
|
int realHeight = metrics.heightPixels;
|
if (realHeight > usableHeight) {
|
return realHeight - usableHeight;
|
} else {
|
return 0;
|
}
|
}
|
|
|
}
|