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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Кто работал с Bluetooth? http://www.cyberforum.ru/android-dev/thread1379736.html
Добрый день! Нужна теоретическая помощь в написании одного Bluetooth-приложение. Просто скажите, в какую сторону "копать" информацию. Вопрос следующий. Есть приложение на Android, которое подключается к ПК. На ПК установлен Windows встроенный драйвер блютуз. Когда подключение прошло успешно, мне нужно, чтобы мой телефон соединялся с программой на ПК по блютузу. Но я понятия не имею, как она...
Android Генерация нескольких звуковых сигналов в цикле. Не доходит до конца Всем доброго времени суток Вот столкнулся с проблемой Класс который генерирует сигналы public class Beeper { private static Beeper instance; public static Beeper getInstance(){ http://www.cyberforum.ru/android-dev/thread1379609.html
TabHost Android
Как можно сделать список табов в табе? Возможно это решается без TabHost?
Android Запрос longblob из mySql
Как можно получить данные типа longblob из mySql ? Текстовые и числовые данные гружу через GET/POST запрос, и далее вытаскиваю из JSON объекта. А longblob как получать ? потом нужно из этих данных создать Bitmap. Видел вариант создавать InputStream из URL, что-то типа такого: InputStream is = new URL(url).openStream(); Bitmap bmp = BitmapFactory.decodeStream(is); но хочется тоже через...
Android Название песни транслирующейся на онлайн радио http://www.cyberforum.ru/android-dev/thread1379310.html
Ребят, хочу создать программу на андроид которая будет воспроизводить поток онлайн радио и показывать название песни которая проигрывается. С воспроизведением проблем нет,а вот как реализовать показ транслирующейся песни? кто знает? подскажите, пожалуйста:):scratch:
Android ANDROID_STUDIO_Beta3 установил Android studio через терминал в Ubuntu.. как оказалось поставилась версия 1.1 Beta 3. Подскажите, в чем будет недостаток использования ее, и можно ли сделать откат на версию 1.0.1?? подробнее

Показать сообщение отдельно
powowstal
26 / 26 / 4
Регистрация: 21.03.2013
Сообщений: 246
22.02.2015, 02:21  [ТС]     Поле для ввода номера в формате: 38(0**)***-**-**
Кому нужно, вышел такой код (немного изменив )
Регистрируем слушатель
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-ы части формы, с экономите кучу времени.
 
Текущее время: 04:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru