First char has black color
monegask1969 opened this issue · 1 comments
Первый элемент строки окрашивается в черный цвет, если маска выглядит следующим образом:
<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;
}