object KeyBoardUtil {
fun hideSoftInput(activity: Activity) {
val imm = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(activity.currentFocus?.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)
}
fun showSoftInput(view: EditText) {
val imm = view.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
view.requestFocus()
imm.showSoftInput(view, 0)
}
fun toggleSoftInput(activity: Activity) {
val imm = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.toggleSoftInput(0, 0)
}
fun onSoftInputStateChanged(activity: Activity, show: () -> Unit = {}, hide: () -> Unit = {}) {
var preUsableHeight = 0
val group = activity.window.decorView.findViewById<View>(android.R.id.content)
group.viewTreeObserver.addOnGlobalLayoutListener {
preUsableHeight = possiblyResizeChildOfContent(preUsableHeight, group, show, hide)
}
}
private fun possiblyResizeChildOfContent(preUsableHeight: Int, view: View, show: () -> Unit, hide: () -> Unit): Int {
var temp = preUsableHeight
val usableHeightNow = computeUsableHeight(view)
if (temp == 0) {
temp = usableHeightNow
}
if (usableHeightNow < temp) {
show()
}
if (usableHeightNow > temp) {
hide()
}
return usableHeightNow
}
private fun computeUsableHeight(view: View): Int {
val r = Rect()
view.getWindowVisibleDisplayFrame(r)
return r.bottom - r.top
}
}
public class KeyBoardUtil {
public static void hideSoftInput(Activity activity) {
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
View currentFocus = activity.getCurrentFocus();
if (currentFocus != null) {
imm.hideSoftInputFromWindow(currentFocus.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}
}
public static void showSoftInput(EditText view) {
InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
view.requestFocus();
if (imm != null) {
imm.showSoftInput(view, 0);
}
}
public static void toggleSoftInput(Activity activity) {
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.toggleSoftInput(0, 0);
}
}
public static void onSoftInputStateChanged(Activity activity, final OnKeyBoardStateChangedListener listener) {
if (listener == null) {
return;
}
final int[] preUsableHeight = {0};
final View group = activity.getWindow().getDecorView().findViewById(android.R.id.content);
group.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
preUsableHeight[0] = possiblyResizeChildOfContent(preUsableHeight[0], group, listener);
}
});
}
private static int possiblyResizeChildOfContent(int preUsableHeight, View view, OnKeyBoardStateChangedListener listener) {
int usableHeightNow = computeUsableHeight(view);
if (preUsableHeight == 0) {
preUsableHeight = usableHeightNow;
}
if (usableHeightNow < preUsableHeight) {
listener.onShow();
}
if (usableHeightNow > preUsableHeight) {
listener.onHide();
}
return usableHeightNow;
}
private static int computeUsableHeight(View view) {
Rect r = new Rect();
view.getWindowVisibleDisplayFrame(r);
return r.bottom - r.top;
}
interface OnKeyBoardStateChangedListener {
/**
* 键盘显示
*/
void onShow();
/**
* 键盘隐藏
*/
void onHide();
}
}