今作っている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);
