今作っているAndroidアプリに
EditTextPreferenceのmaxLengthを指定して作成した
設定メニューがあるが
絵文字を入れるとmaxLengthに設定した分の文字が入らない
ググってみたところ、
絵文字のようなUnicodeのサロゲートペアで表現される文字は
2文字としてカウントされてしまうようだ
この問題の対処法としては以下で紹介されているように
TextViewのmaxLengthのサロゲートペア対応(絵文字に対応した文字数制限)
InputFilterを継承した自前のクラスを生成し
EditTextのsetFiltersに設定してあげればよいとのことでした。
自前のクラスは前述したリンク先を参考に
ここではEditTextPreferenceでの方法を記載。
EditTextPreference _editPreference1; final int MAX_TAB_NAME_LENGTH = 5; /* 自前クラスのコンストラクタに最大文字数を設定 */ InputLengthFilter inputLengthFilter = new InputLengthFilter(MAX_TAB_NAME_LENGTH); /* setFiltersに設定するために自前クラスのインスタンスをInputFilter配列に格納 */ InputFilter[] filters = {inputLengthFilter}; /* EditTextPreferenceのオブジェクト取得 */ _editPreference1 = (EditTextPreference) findPreference("list1_key"); /* EditTextPreferenceのEditTextを取得 */ EditText editText1 = _editPreference1.getEditText(); /* 最大文字数を設定 */ editText1.setFilters(filters);