Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
powowstal
26 / 26 / 4
Регистрация: 21.03.2013
Сообщений: 246
#1

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

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

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

Android Числовой InputType для EditText с возможностью ввода минуса
Сохранение данных в vcf формате Android
Маска ввода для EditText Android
Android Получение ответа в формате json
EditText для ввода даты Android
Android Программа для блокировки номера
Сохранить число в поле ввода после нажатия арифметического действия Android
Android JSOUP POST. В ответ вместо JSon приходит разметка страницы с полями для ввода данных
Клавиатура наезжает на поле ввода Android
Android Вставить слово в поле ввода другого приложения. Возможно ли такое?
Android Поле ввода адреса с динамическим выводом подсказки
Как включить переадресацию на андроид для избранного номера? Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
21.02.2015, 18:39     Поле для ввода номера в формате: 38(0**)***-**-** #2
Не делал, но, как первая мысль, смотрел бы в сторону TextWatcher и обрабатывал его события...

Добавлено через 1 минуту
Код страны - 380, поэтому правильней 380(**)***-**-**
NEvOl
13 / 12 / 0
Регистрация: 13.08.2012
Сообщений: 665
21.02.2015, 19:36     Поле для ввода номера в формате: 38(0**)***-**-** #3
powowstal, можно попробовать вручную парсить строку на событии ввода символа (первое что в голову приходит)
powowstal
26 / 26 / 4
Регистрация: 21.03.2013
Сообщений: 246
22.02.2015, 02:21  [ТС]     Поле для ввода номера в формате: 38(0**)***-**-** #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-ы части формы, с экономите кучу времени.
Yandex
Объявления
22.02.2015, 02:21     Поле для ввода номера в формате: 38(0**)***-**-**
Ответ Создать тему
Опции темы

Текущее время: 13:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru