Skip to content

Placeholder по умолчанию не работает #41

Open
IvanGalitskiy opened this issue Oct 4, 2018 · 1 comment
Open

Placeholder по умолчанию не работает #41

IvanGalitskiy opened this issue Oct 4, 2018 · 1 comment

Comments

@IvanGalitskiy
Copy link

IvanGalitskiy commented Oct 4, 2018

При использовании символа _ в качестве placeholder-a он не отображается. При использовании любого другого все работает.

    Slot[] slots = new UnderscoreDigitSlotsParser().parseSlots("+7 (___) ___-__-__");
    final MaskImpl mask = MaskImpl.createTerminated(slots);

    mask.setPlaceholder('_');

    mask.setShowingEmptySlots(true);
    mask.setForbidInputWhenFilled(true);


    FormatWatcher formatWatcher = new MaskFormatWatcher(mask);
    formatWatcher.installOn(vPhoneEditText);`
@IlyaSergeev
Copy link

Наткнулся на такую же проблему. Тут проблема в том, что при выставлении у EditText inputType=InputType.TYPE_CLASS_PHONE устанавливается keyListener = android.text.method.DialerKeyListener. DialerKeyListener фильтрует все символы, которых не может быть в номере телефона, в том числе и _. Чтобы обойти это ограничение можно сделать свой KeyListener и принудительно выставить его для EditText. Например, вот так (пример на kotlit):


import android.text.method.DialerKeyListener

class PhoneKeyListener : DialerKeyListener()
{
    companion object
    {
        val instance by lazy { PhoneKeyListener() }

        private val CHARACTERS = charArrayOf('0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , '#' , '*' , '+' , '-' , '(' , ')' , ',' , '/' , 'N' , '.' , ' ' , ';' , '_')
    }

    override fun getAcceptedChars() : CharArray
    {
        return CHARACTERS
    }
}

после инициализации EditText выставляем
phoneEditText.keyListener = PhoneKeyListener.instance
теперь EditText перестанет фильтровать _ и маска заработает

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants