/* * Copyright 2016 bingoogolapple * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package cn.bingoogolapple.swipebacklayout; import android.app.Activity; import android.app.Dialog; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.os.Build; import android.os.Handler; import android.view.MotionEvent; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; /** * 作者:王浩 邮件:bingoogolapple@gmail.com * 创建时间:16/12/27 下午10:07 * 描述: */ public class BGAKeyboardUtil { private BGAKeyboardUtil() { } /** * 关闭activity中打开的键盘 * * @param activity */ public static void closeKeyboard(Activity activity) { View view = activity.getWindow().peekDecorView(); if (view != null) { InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); } } /** * 关闭dialog中打开的键盘 * * @param dialog */ public static void closeKeyboard(Dialog dialog) { View view = dialog.getWindow().peekDecorView(); if (view != null) { InputMethodManager inputMethodManager = (InputMethodManager) dialog.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); } } /** * 打开键盘 * * @param context * @param editText */ public static void openKeyboard(final Context context, final EditText editText) { new Handler().postDelayed(new Runnable() { @Override public void run() { editText.requestFocus(); editText.setSelection(editText.getText().toString().length()); InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED); } }, 300); } /** * 拷贝文档到黏贴板 * * @param text */ public static void clip(Context context, String text) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { android.text.ClipboardManager clipboardManager = (android.text.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); clipboardManager.setText(text); } else { ClipboardManager clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); clipboardManager.setPrimaryClip(ClipData.newPlainText("content", text)); } } /** * 切换键盘的显示与隐藏 * * @param activity */ public static void toggleKeyboard(Activity activity) { InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); if (inputMethodManager.isActive()) { inputMethodManager.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); } } /** * 处理点击非 EditText 区域时,自动关闭键盘 * * @param isAutoCloseKeyboard 是否自动关闭键盘 * @param currentFocusView 当前获取焦点的控件 * @param motionEvent 触摸事件 * @param dialogOrActivity Dialog 或 Activity */ public static void handleAutoCloseKeyboard(boolean isAutoCloseKeyboard, View currentFocusView, MotionEvent motionEvent, Object dialogOrActivity) { if (isAutoCloseKeyboard && motionEvent.getAction() == MotionEvent.ACTION_DOWN && currentFocusView != null && (currentFocusView instanceof EditText) && dialogOrActivity != null) { int[] leftTop = {0, 0}; currentFocusView.getLocationInWindow(leftTop); int left = leftTop[0]; int top = leftTop[1]; int bottom = top + currentFocusView.getHeight(); int right = left + currentFocusView.getWidth(); if (!(motionEvent.getX() > left && motionEvent.getX() < right && motionEvent.getY() > top && motionEvent.getY() < bottom)) { if (dialogOrActivity instanceof Dialog) { closeKeyboard((Dialog) dialogOrActivity); } else if (dialogOrActivity instanceof Activity) { closeKeyboard((Activity) dialogOrActivity); } } } } }