1

私は、電話番号をユーザータイプとしてフォーマットする簡単な解決策を見つけようとしています。フォーマットにライブラリを使用したくありません。それを行う方法についてのアイデアはありますか?

4

1 に答える 1

4

編集に TextChangedListener を追加し、そこで処理を準備する必要があるようです。最初に +7 を挿入する小さな例を次に示します (実際には、真ん中の - のロジックは同じままで、別の文字列操作だけが必要です)。

/** Helper to control input phone number */
static class PrefixEntryWatcher implements TextWatcher {
    /** flag to avoid re-enter in {@link PhoneEntryWatcher#afterTextChanged(Editable)}*/
    private boolean isInAfterTextChanged = false;
    /** Prefix to insert */
    private final String prefix;
    /** Prefix to insert length */
    private final int prefixLength;
    /** Weak reference to parent text edit */
    private final WeakReference<EditText> parentEdit;

    /**
     * Default constructor
     *
     * @param prefix to be used for prefix
     */
    PrefixEntryWatcher(final String prefix, final EditText parentEdit) {
        this.prefix = prefix;
        this.prefixLength = (prefix == null ? 0 : prefix.length());
        this.parentEdit = new WeakReference<EditText>(parentEdit);
    }

    @Override
    public synchronized void afterTextChanged(final Editable text) {
       if (!this.isInAfterTextChanged) {
           this.isInAfterTextChanged = true;

           if (text.length() <= this.prefixLength) {
               text.clear();
               text.insert(0, this.prefix);

               final EditText parent = this.parentEdit.get();

               if (null != parent) {
                   parent.setSelection(this.prefixLength);
               }
           }
           else {
               if (!this.prefix.equals(text
                       .subSequence(0, this.prefixLength).toString())) {
                   text.clear();
                   text.insert(0, this.prefix);
               }

               final String withoutSpaces
                   = text.toString().replaceAll(" ", "");

               text.clear();
               text.insert(0, withoutSpaces);
           }

           // now delete all spaces
           this.isInAfterTextChanged = false;
       }
    }

    @Override
    public void beforeTextChanged(final CharSequence s,
            final int start,
            final int count,
            final int after) {
        // nothing to do here
    }

    @Override
    public void onTextChanged(final CharSequence s,
            final int start,
            final int before,
            final int count) {
        // nothing to do here
    }
}

コードとロジックはそれほど多くないため、このタイプの EditText 処理にはサードパーティのライブラリは必要ないようです。

于 2012-07-20T03:43:17.960 に答える