edittext-mask icon indicating copy to clipboard operation
edittext-mask copied to clipboard

First char has black color

Open monegask1969 opened this issue 4 years ago • 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" /> В таком случае, скобка горит черным

Подскажите, пожалуйста, это баг или необходимо как-то настроить элемент?

image

monegask1969 avatar Apr 30 '20 19:04 monegask1969

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;
}

ashishgingercube avatar Apr 13 '23 06:04 ashishgingercube