2017-11-27 24 views
0

私は、EditTextに入力された文字数を制限する必要があるという要件があります。これは私の.xmlレイアウトファイルのEditTextの属性android:maxLengthで簡単に実現できます。emoji入力でedittextの最大文字数を制限する方法は?

私の問題は、私のEditTextはユーザーにemojisの入力を許可することです。さてキャッチは、絵文字の一部の長さは、だから、時々、2時には1であるが、アンドロイド:maxLengthの= 1は、私が正しい長さを得ることができます= 2

長の絵文字を入力することはできません。私はそうのようなInputFilter使用してみました

Character.codePointCount(charSequence.toString(), 0, charSequence.toString().length()) 

:Characterクラスのこの方法では、(1としてカウント各絵文字付き)列

InputFilter inputFilter = new InputFilter() { 
      @Override 
      public CharSequence filter(CharSequence charSequence, int i, int i1, Spanned spanned, int i2, int i3) { 
       if (Character.codePointCount(charSequence.toString(), 0, charSequence.toString().length()) <= maxCharactersAllowed) { 
        return null; 
       } else { 
        return ""; 
       } 
      } 
     }; 

しかしたCharSequenceを返すには、私に平文と絵文字のための奇妙な結果を与えますテキスト長さの比較のために使用している文字列が奇妙な結果を出すことを示します。

誰かが、絵文字を受け入れるEditTextの最大文字数の制限を正しく実装するのに手伝ってもらえますか?

+0

このコードをのEditTextため 'TextWatcher'を使用してみてくださいとonTextChanged' – Developer

答えて

1

ありがとう、Joe。あなたの助けを借りて私のような解決策を見つけることができたので:絵文字は、Androidキーボードで利用できない場合

editText.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
       oldTextString = charSequence.toString(); 
      } 

      @Override 
      public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

      } 

      @Override 
      public void afterTextChanged(Editable editable) { 
       String newTextString = editable.toString(); 
       if (!oldTextString.equals(newTextString)) { 
        if (Character.codePointCount(newTextString, 0, newTextString.length()) > maxCharactersAllowed) { 
         newTextString = oldTextString; 
        } 
        editText.setText(newTextString); 
        editText.setSelection(newTextString.length()); 
       } 
      } 
     }); 
+0

'にコードを実装では動作しません。私が最新のOSから新しいemojisを入力して古いOSでチェックした場合、それは数を超えています。 –

+0

使用している絵文字を教えていただけますか?コードポイントのカウントは何ですか? –

+0

新しい絵文字を取り込むことができます。ref:https://blog.emojipedia.org/157-new-emojis-in-the-final-2018-emoji-list/ –

関連する問題