Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
powowstal
30 / 30 / 5
Регистрация: 21.03.2013
Сообщений: 369
1

Поле для ввода номера в формате: 38(0**)***-**-**

21.02.2015, 16:48. Просмотров 677. Ответов 3
Метки нет (Все метки)

Кто то делал поле для ввода номера в формате: 38(0**)***-**-**
Мб как то быстренько это можно сделать ?
То есть в поле должно быть введено 38(0 ) они не стераются а когда вводишь цыфры они прописываются вместо звездочек
1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2015, 16:48
Ответы с готовыми решениями:

Реализовать контроль ошибок ввода данных в поле, предназначенное для ввода номера телефона
1.Реализовать в JavaScript контроль ошибок ввода данных в поле, предназначенное...

Создать форму для ввода телефонного номера в формате хх-хх-хх
Здравствуйте.. подскажите, как можно Создать форму для ввода телефонного номера...

Поле ввода для серийного номера
Всем привет! В большинстве программного обеспечения разных компаний существует...

Нужно сделать поле ввода номера телефона
Подскажите как сделать, что бы в edit перед вводимыми в него данными выводилось...

Как сделать запрет ввода букв в поле для ввода input
Здравствуйте! Есть стандартное поле ввода <input type='text' name='name1'...

3
Armagedo
210 / 210 / 60
Регистрация: 22.08.2014
Сообщений: 644
21.02.2015, 18:39 2
Не делал, но, как первая мысль, смотрел бы в сторону TextWatcher и обрабатывал его события...

Добавлено через 1 минуту
Код страны - 380, поэтому правильней 380(**)***-**-**
0
NEvOl
19 / 18 / 1
Регистрация: 13.08.2012
Сообщений: 734
21.02.2015, 19:36 3
powowstal, можно попробовать вручную парсить строку на событии ввода символа (первое что в голову приходит)
0
powowstal
30 / 30 / 5
Регистрация: 21.03.2013
Сообщений: 369
22.02.2015, 02:21  [ТС] 4
Кому нужно, вышел такой код (немного изменив )
Регистрируем слушатель
Java
1
2
3
UsPhoneNumberFormatter addLineNumberFormatter = new UsPhoneNumberFormatter(
                        new WeakReference<EditText>(phoneNamber));
                        phoneNamber.addTextChangedListener(addLineNumberFormatter);
И сам класс
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package com.example.bill;
 
import java.lang.ref.WeakReference;
 
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
 
 
    public class UsPhoneNumberFormatter implements TextWatcher {
        //This TextWatcher sub-class formats entered numbers as 1 (123) 456-7890
        private boolean mFormatting; // this is a flag which prevents the
                                        // stack(onTextChanged)
        private boolean clearFlag;
        private int mLastStartLocation;
        private String mLastBeforeText;
        private WeakReference<EditText> mWeakEditText;
 
        public UsPhoneNumberFormatter(WeakReference<EditText> weakEditText) {
            this.mWeakEditText = weakEditText;
        }
 
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            if (after == 0 && s.toString().equals("380 ")) {
                clearFlag = true;
            }
            mLastStartLocation = start;
            mLastBeforeText = s.toString();
        }
 
        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            // TODO: Do nothing
        }
 
        @Override
        public void afterTextChanged(Editable s) {
            // Make sure to ignore calls to afterTextChanged caused by the work
            // done below
            if (!mFormatting) {
                mFormatting = true;
                int curPos = mLastStartLocation;
                String beforeValue = mLastBeforeText;
                String currentValue = s.toString();
                String formattedValue = formatUsNumber(s);
                if (currentValue.length() > beforeValue.length()) {
                    int setCusorPos = formattedValue.length()
                            - (beforeValue.length() - curPos);
                    mWeakEditText.get().setSelection(setCusorPos < 0 ? 0 : setCusorPos);
                } else {
                    int setCusorPos = formattedValue.length()
                            - (currentValue.length() - curPos);
                    if(setCusorPos > 0 && !Character.isDigit(formattedValue.charAt(setCusorPos - 1))){
                        setCusorPos--;
                    }
                    mWeakEditText.get().setSelection(setCusorPos < 0 ? 0 : setCusorPos);
                }
                mFormatting = false;
            }
        }
 
        private String formatUsNumber(Editable text) {
            StringBuilder formattedString = new StringBuilder();
            // Remove everything except digits
            int p = 0;
            while (p < text.length()) {
                char ch = text.charAt(p);
                if (!Character.isDigit(ch)) {
                    text.delete(p, p + 1);
                } else {
                    p++;
                }
            }
            // Now only digits are remaining
            String allDigitString = text.toString();
 
            int totalDigitCount = allDigitString.length();
 
            if (totalDigitCount == 0
                    || (totalDigitCount > 12 && !allDigitString.startsWith("380"))
                    || totalDigitCount > 13) {
                // May be the total length of input length is greater than the
                // expected value so we'll remove all formatting
                text.clear();
                text.append(allDigitString);
                return allDigitString;
            }
            int alreadyPlacedDigitCount = 0;
            // Only '1' is remaining and user pressed backspace and so we clear
            // the edit text.
            if (allDigitString.equals("380") && clearFlag) {
                text.clear();
                clearFlag = false;
                return "";
            }
            if (allDigitString.startsWith("380")) {
                formattedString.append("380 ");
                alreadyPlacedDigitCount+=3;
            }
            // The first 3 numbers beyond '380' must be enclosed in brackets "()"
            if (totalDigitCount - alreadyPlacedDigitCount > 2 && totalDigitCount > 3) {
                formattedString.append("("
                        + allDigitString.substring(alreadyPlacedDigitCount,
                                alreadyPlacedDigitCount + 2) + ") ");
                alreadyPlacedDigitCount += 2;
            }
            // There must be a '-' inserted after the next 3 numbers
            if (totalDigitCount - alreadyPlacedDigitCount > 3) {
                formattedString.append(allDigitString.substring(
                        alreadyPlacedDigitCount, alreadyPlacedDigitCount + 3)
                        + "-");
                alreadyPlacedDigitCount += 3;
            }
            // There must be a '-' inserted after the next 10 numbers
            if (totalDigitCount - alreadyPlacedDigitCount > 2 && totalDigitCount > 10) {
                formattedString.append(allDigitString.substring(
                        alreadyPlacedDigitCount, alreadyPlacedDigitCount + 2)
                        + "-");
                alreadyPlacedDigitCount += 2;
            }
            
            // All the required formatting is done so we'll just copy the
            // remaining digits.
            if (totalDigitCount > alreadyPlacedDigitCount) {
                formattedString.append(allDigitString
                        .substring(alreadyPlacedDigitCount));
            }
 
            text.clear();
            text.append(formattedString.toString());
            return formattedString.toString();
        }
 
 
 
    }
Добавлено через 3 часа 30 минут
Кто задумал задавать форму для ввода информации, мой совет - разбивайте на EditText-ы части формы, с экономите кучу времени.
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2015, 02:21

Нужно сделать поле ввода для ввода даты по шаблону
Нужно сделать поле ввода для ввода даты по шаблону ( __ . __ . ____ ). При воде...

Реализовать контроль ошибок ввода данных в поле, предназначенное для ввода времени
5.Реализовать в JavaScript контроль ошибок ввода данных в поле, предназначенное...

Реализовать контроль ошибок ввода данных в поле, предназначенное для ввода пароля
4.Реализовать в JavaScript контроль ошибок ввода данных в поле, предназначенное...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru