edittext-mask
edittext-mask copied to clipboard
First char has black color
Первый элемент строки окрашивается в черный цвет, если маска выглядит следующим образом: <br.com.sapereaude.maskedEditText.MaskedEditText android:layout_width="match_parent" android:layout_height="match_parent" android:singleLine="true" android:id="@+id/phone" android:inputType="phone" android:typeface="monospace" mask:allowed_chars="1234567890" mask:mask="(###)###-##-##" android:hint="XXXXXXXXXX" /> В таком случае, скобка горит черным
Подскажите, пожалуйста, это баг или необходимо как-то настроить элемент?
Copy the below code and replace them in the MaskedEditText.java-
@Override public void afterTextChanged(Editable s) { if(!editingAfter && editingBefore && editingOnChanged) { editingAfter = true; if (hasHint() && (keepHint || rawText.length() == 0)) { boolean typing = true; if(rawText.length() == 0) { typing = false; } setText(makeMaskedTextWithHint(typing)); } else { setText(makeMaskedText()); }
selectionChanged = false;
setSelection(selection);
editingBefore = false;
editingOnChanged = false;
editingAfter = false;
ignore = false;
}
}
private void cleanUp() {
initialized = false;
if(mask == null || mask.isEmpty()){
return;
}
generatePositionArrays();
if (!shouldKeepText || rawText == null) {
rawText = new RawText();
selection = rawToMask[0];
}
editingBefore = true;
editingOnChanged = true;
editingAfter = true;
if(hasHint() && rawText.length() == 0) {
this.setText(makeMaskedTextWithHint(false));
} else {
this.setText(makeMaskedText());
}
editingBefore = false;
editingOnChanged = false;
editingAfter = false;
maxRawLength = maskToRaw[previousValidPosition(mask.length() - 1)] + 1;
lastValidMaskPosition = findLastValidMaskPosition();
initialized = true;
super.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (focusChangeListener != null) {
focusChangeListener.onFocusChange(v, hasFocus);
}
if (hasFocus()) {
selectionChanged = false;
MaskedEditText.this.setSelection(lastValidPosition());
}
}
});
}
private CharSequence makeMaskedTextWithHint(boolean typing) { SpannableStringBuilder ssb = new SpannableStringBuilder(); int mtrv; int maskFirstChunkEnd = rawToMask[0]; for(int i = 0; i < mask.length(); i++) { mtrv = maskToRaw[i]; if (mtrv != -1) { if (mtrv < rawText.length()) { ssb.append(rawText.charAt(mtrv)); } else { ssb.append(getHint().charAt(maskToRaw[i])); } } else { ssb.append(mask.charAt(i)); }
if(i == 0 && !typing) {
ssb.setSpan(new ForegroundColorSpan(getCurrentHintTextColor()), i, i + 1, 0);
}
if ((keepHint && rawText.length() < rawToMask.length && i >= rawToMask[rawText.length()])
|| (!keepHint && i >= maskFirstChunkEnd)) {
ssb.setSpan(new ForegroundColorSpan(getCurrentHintTextColor()), i, i + 1, 0);
}
}
return ssb;
}