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

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

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

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

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

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

Клавиатура наезжает на поле ввода - Программирование Android
Вот какая проблема, у меня в приложении, при необходимости ввода данных, клавиатура закрывает поле EditText. При чем, при первом вхождении...

Поле ввода адреса с динамическим выводом подсказки - Программирование Android
Всем привет! Подскажите пожалуйста каким образом возможно реализовать поле ввода почтового адреса с выводом подсказки с реальными...

Вставить слово в поле ввода другого приложения. Возможно ли такое? - Программирование Android
Добрый день! Задача следующая. Находясь в какой-либо программе X (курсор в поле EditText), пользователь вызывает мою программу Y, в...

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

Программа для блокировки номера - Программирование Android
тов. программисты, прошу вашей помощи, облазил все дебри инета и ничё не нашел. мне надо какую нибудь маленькую и простую програмку для...

Маска ввода для EditText - Программирование Android
Здравствуйте. А можно как то задать маску ввода для текстового поля? Ну например, вводим сумму денег в EditText и формат должен быть типа...

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

Добавлено через 1 минуту
Код страны - 380, поэтому правильней 380(**)***-**-**
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 726
21.02.2015, 19:36     Поле для ввода номера в формате: 38(0**)***-**-** #3
powowstal, можно попробовать вручную парсить строку на событии ввода символа (первое что в голову приходит)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2015, 02:21     Поле для ввода номера в формате: 38(0**)***-**-**
Еще ссылки по теме:

EditText для ввода даты - Программирование Android
Нужно сделать edittext для даты. Я разместил рядом 3 шт. , для дня, месяца, и года соответственно. В каждом максимальное число вводимых...

Как включить переадресацию на андроид для избранного номера? - Программирование Android
Здравствуйте. Могу ли я включить переадресацию вызовов на своем андроид так чтобы не все входящие номера переадресовывались а только...

Числовой InputType для EditText с возможностью ввода минуса - Программирование Android
<EditText <!-- cut --> android:ems="10" android:inputType="numberDecimal" > ...

JSOUP POST. В ответ вместо JSon приходит разметка страницы с полями для ввода данных - Программирование Android
Делаю пост запрос к апи сайта. Назад должен получить json, однако получаю разметку страницы с полями для ввода данных. Т.е. как будто...


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

Или воспользуйтесь поиском по форуму:
powowstal
28 / 28 / 4
Регистрация: 21.03.2013
Сообщений: 303
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**)***-**-**
Ответ Создать тему
Опции темы

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