tinkoff-mobile-tech / decoro

Android library designed for automatic formatting of text input by custom rules
Apache License 2.0
391 stars 31 forks source link

+7 (7....... #55

Closed eduard1abdulmanov123 closed 4 years ago

eduard1abdulmanov123 commented 4 years ago

Добрый день. Подскажите, пожалуйста, как можно решить следующую задачу. При использовании маски RUS_NUMBER_PHONE происходит следующее. Если я вставляю первым символом семерку, я получаю + 7 (7, а + 7 (, то есть семерка просто съедается, а курсор перемещается за скобку. Если ввести любой другой символ, то он напишется за скобкой. Как можно сделать аналогичное поведение и для 7. То есть при вводе первой семерки, ставить 7 за скобкой, а не прогладывать ее.

al-dr commented 4 years ago

можно для 7 (2 слот) попробовать указать правило вставки Slot.RULE_INPUT_MOVES_INPUT

slots[1].setFlags(Slot.RULE_INPUT_MOVES_INPUT);

eduard1abdulmanov123 commented 4 years ago

Да, спасибо большое, это сработало. То есть получается, что RULE_INPUT_REPLACE в связке с RULE_INPUT_MOVES_INPUT заменяет текущей hardcode, если символы совпадают, а остальные проталкиваются. А если указать только RULE_INPUT_REPLACE, то все символы будут проталкиваться дальше.

al-dr commented 4 years ago

да.

так же добавлю что изначальное поведение с 7 мы считаем комфортным для пользователя при вводе российских номеров. исходим из предположения, что если в изначально пустое поле человек ввел 7, то скорее всего "имел ввиду" он все же 7 - которая код страны.

UPD: так же механизм обеспечивающий возможность для hardcoded слота принимать в себя значение которое он презентует, позволяет вставлять (например из буфера обмена) готовые номера с 7. например 79990000000 или +799900000000

eduard1abdulmanov123 commented 4 years ago

Понял Вас. Спасибо большое!