-
Notifications
You must be signed in to change notification settings - Fork 0
/
KeyboardUtils.java
executable file
·120 lines (111 loc) · 4.46 KB
/
KeyboardUtils.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package com.youth.xframe.utils;
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;
/**
* 键盘相关工具类
*/
public class XKeyboardUtils {
private XKeyboardUtils() {
throw new UnsupportedOperationException("u can't instantiate me...");
}
/**
* 关闭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) {
XKeyboardUtils.closeKeyboard((Dialog) dialogOrActivity);
} else if (dialogOrActivity instanceof Activity) {
XKeyboardUtils.closeKeyboard((Activity) dialogOrActivity);
}
}
}
}
}