日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android edittext 输入法表情,Android开发中EditText禁止输入Emoji表情符

發布時間:2024/3/13 Android 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android edittext 输入法表情,Android开发中EditText禁止输入Emoji表情符 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在開發中可能多處會用到過濾Emoji表情符,一般情況下,我們會通過EditText的addTextChangedListener()監聽來過濾Emoji表情,但在實際開發中會遇到多個EditText,為了方便使用,我們可以自定義EditText來實現,代碼如下:

package com.piesat.dragonfly.ui.view;

import android.content.Context;

import android.text.Editable;

import android.text.Selection;

import android.text.Spannable;

import android.text.TextWatcher;

import android.util.AttributeSet;

import android.widget.EditText;

import android.widget.Toast;

/**

* @Description EditText限制輸入表情符號

* @Authour zhoujp

* @Time 2016年11月18日 下午2:09:58

*

*/

public class ContainsEmojiEditText extends EditText {

// 輸入表情前的光標位置

private int cursorPos;

// 輸入表情前EditText中的文本

private String inputAfterText;

// 是否重置了EditText的內容

private boolean resetText;

private Context mContext;

public ContainsEmojiEditText(Context context) {

super(context);

this.mContext = context;

initEditText();

}

public ContainsEmojiEditText(Context context, AttributeSet attrs) {

super(context, attrs);

this.mContext = context;

initEditText();

}

public ContainsEmojiEditText(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

this.mContext = context;

initEditText();

}

// 初始化edittext 控件

private void initEditText() {

addTextChangedListener(new TextWatcher() {

@Override

public void beforeTextChanged(CharSequence s, int start, int before, int count) {

if (!resetText) {

cursorPos = getSelectionEnd();

// 這里用s.toString()而不直接用s是因為如果用s,

// 那么,inputAfterText和s在內存中指向的是同一個地址,s改變了,

// inputAfterText也就改變了,那么表情過濾就失敗了

inputAfterText = s.toString();

}

}

@Override

public void onTextChanged(CharSequence s, int start, int before, int count) {

if (!resetText) {

if (count >= 2) {// 表情符號的字符長度最小為2

CharSequence input = s.subSequence(cursorPos, cursorPos + count);

if (containsEmoji(input.toString())) {

resetText = true;

Toast.makeText(mContext, "不支持輸入表情符號!", Toast.LENGTH_SHORT).show();

// 是表情符號就將文本還原為輸入表情符號之前的內容

setText(inputAfterText);

CharSequence text = getText();

if (text instanceof Spannable) {

Spannable spanText = (Spannable) text;

Selection.setSelection(spanText, text.length());

}

}

}

} else {

resetText = false;

}

}

@Override

public void afterTextChanged(Editable editable) {

}

});

}

/**

* 檢測是否有emoji表情

*

* @param source

* @return

*/

public static boolean containsEmoji(String source) {

int len = source.length();

for (int i = 0; i < len; i++) {

char codePoint = source.charAt(i);

if (!isEmojiCharacter(codePoint)) { // 如果不能匹配,則該字符是Emoji表情

return true;

}

}

return false;

}

/**

* 判斷是否是Emoji

*

* @param codePoint

*? ? ? ? ? ? 比較的單個字符

* @return

*/

private static boolean isEmojiCharacter(char codePoint) {

return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) || (codePoint == 0xD)

|| ((codePoint >= 0x20) && (codePoint <= 0xD7FF)) || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD))

|| ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));

}

}

總結

以上是生活随笔為你收集整理的android edittext 输入法表情,Android开发中EditText禁止输入Emoji表情符的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。