В составлении электронной почты, я хочу дизайн входов для Yahoo, как функция в Android - PullRequest
1 голос
/ 13 октября 2011

При составлении электронной почты, когда пользователь вводит / выбирает идентификаторы электронной почты в / cc / bcc. Предположим, есть 7-8 идентификаторов электронной почты, и теперь пользователь хочет удалить третий. Пользователю очень трудно перейти к третьему и удалить его. Поэтому я думаю, что решение для этого,

  1. Пользователь вводит идентификатор электронной почты и нажимает пробел или COMMA.
  2. тогда один прямоугольник должен появиться на фоне.
  3. Я хочу крестик в правом углу этой прямоугольной рамки.
  4. Если пользователь хочет удалить этот третий идентификатор электронной почты, он просто нажмет на крестик третьего прямоугольника, который содержит этот идентификатор электронной почты.

(см. Рисунок ниже от автора электронной почты Yahoo)

Yahoo mail box

Мне нужен аналогичный функционал. Как я могу достичь в Android? Есть ли какой-нибудь стандартный компонент, который я могу использовать? В настоящее время я использую автозаполнение текста для To, Cc, Bcc. Пожалуйста помоги. Заранее спасибо.

1 Ответ

1 голос
/ 23 октября 2011

У меня нет времени, чтобы написать рабочий код, но я укажу вам правильное направление.Ключ для выполнения забавных вещей с текстом в стандартных компонентах, таких как EditText, называется "пролетами".

Предлагаемый план атаки:

  1. Добавьте TextWatcher к вашему EditText чтобы вы знали, когда текст изменяется.
  2. Каждый раз, когда текст изменяется, сканируйте содержимое на предмет совпадения с адресом электронной почты (предложите для этого использовать регулярное выражение).
  3. Для каждого соответствующего адреса электронной почтысгенерируйте Bitmap эквивалент, используя стандартные API рисования (т.е. создайте Canvas, измерьте текст, нарисуйте фон, нарисуйте текст).
  4. Создайте ImageSpan (это своего родаключ ко всему) используя ваше растровое изображение в качестве аргумента конструктора.
  5. Замените адрес электронной почты в тексте одним пробелом (скажем) и вызовите setSpan() для этого единственного символа, чтобы ваш ImageSpan заменил его внешний вид.
...