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