/*
* 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);
}
}
}
}
}