絵文字を付けたEditTextPreferenceのmaxLength

今作っている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);
スポンサーリンク
スポンサーリンク
スポンサーリンク
  • このエントリーをはてなブックマークに追加

コメントをどうぞ

メールアドレスが公開されることはありません。