Skip to content

Commit 65d821c

Browse files
committed
修复输入框,号无法输入
1 parent 33c483b commit 65d821c

File tree

1 file changed

+38
-27
lines changed

1 file changed

+38
-27
lines changed

circledialog/src/main/java/com/mylhyl/circledialog/view/BodyInputView.java

Lines changed: 38 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import android.content.Context;
44
import android.os.Build;
55
import android.text.Editable;
6+
import android.text.InputFilter;
67
import android.text.InputType;
8+
import android.text.Spanned;
79
import android.text.TextUtils;
810
import android.text.TextWatcher;
911
import android.view.View;
@@ -18,6 +20,8 @@
1820
import com.mylhyl.circledialog.view.listener.InputView;
1921
import com.mylhyl.circledialog.view.listener.OnCreateInputListener;
2022

23+
import java.util.regex.Pattern;
24+
2125
import static com.mylhyl.circledialog.res.values.CircleDimen.INPUT_COUNTER__TEXT_SIZE;
2226

2327
/**
@@ -113,7 +117,7 @@ public void onLayoutChange(View v, int left, int top, int right, int bottom, int
113117
}
114118

115119
if (inputParams.isEmojiInput) {
116-
mEditText.addTextChangedListener(new EmojiWatcher(mEditText));
120+
mEditText.setFilters(new InputFilter[]{new EmojiFilter()});
117121
}
118122

119123
OnCreateInputListener createInputListener = params.createInputListener;
@@ -160,13 +164,6 @@ static boolean isChinese(String str) {
160164
return isChinese;
161165
}
162166

163-
static boolean isEmojiCharacter(char codePoint) {
164-
return !((codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA)
165-
|| (codePoint == 0xD) || ((codePoint >= 0x20) && codePoint <= 0xD7FF))
166-
|| ((codePoint >= 0xE000) && (codePoint <= 0xFFFD))
167-
|| ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));
168-
}
169-
170167
@Override
171168
public EditText getInput() {
172169
return mEditText;
@@ -240,35 +237,49 @@ public void afterTextChanged(Editable editable) {
240237
}
241238
}
242239

243-
static class EmojiWatcher implements TextWatcher {
244-
//监听改变的文本框
245-
private EditText mEditText;
240+
static class EmojiFilter implements InputFilter {
241+
Pattern emojiPattern = Pattern.compile("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]",
242+
Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
246243

247-
public EmojiWatcher(EditText editText) {
248-
this.mEditText = editText;
244+
public EmojiFilter() {
249245
}
250246

251247
@Override
252-
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
253-
248+
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
249+
if (this.emojiPattern.matcher(source).find() || containsEmoji(source)) {
250+
return "";
251+
}
252+
return source;
254253
}
255254

256-
@Override
257-
public void onTextChanged(CharSequence s, int start, int before, int count) {
258-
int index = mEditText.getSelectionStart() - 1;
259-
mEditText.removeTextChangedListener(this);
260-
if (index > 0) {
261-
if (isEmojiCharacter(mEditText.getText().charAt(index))) {
262-
Editable edit = mEditText.getText();
263-
edit.delete(start, start + count);
255+
/**
256+
* 检测是否有emoji表情
257+
*
258+
* @param source
259+
* @return
260+
*/
261+
private static boolean containsEmoji(CharSequence source) {
262+
int len = source.length();
263+
for (int i = 0; i < len; i++) {
264+
char codePoint = source.charAt(i);
265+
if (!isEmojiCharacter(codePoint)) { //如果不能匹配,则该字符是Emoji表情
266+
return true;
264267
}
265268
}
266-
mEditText.addTextChangedListener(this);
269+
return false;
267270
}
268271

269-
@Override
270-
public void afterTextChanged(Editable editable) {
271-
272+
/**
273+
* 判断是否是Emoji
274+
*
275+
* @param codePoint 比较的单个字符
276+
* @return
277+
*/
278+
private static boolean isEmojiCharacter(char codePoint) {
279+
return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) ||
280+
(codePoint == 0xD) || ((codePoint >= 0x20) && (codePoint <= 0xD7FF)) ||
281+
((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || ((codePoint >= 0x10000)
282+
&& (codePoint <= 0x10FFFF));
272283
}
273284
}
274285
}

0 commit comments

Comments
 (0)