2011-05-30 2 views
1

Я ищу способ вставить смайлики/смайлики/любые растровые изображения в текстовое поле (LabelField, EditField, что угодно). Из того, что я исследовал до сих пор, нет прямого способа сделать это, поэтому я застрял в попытке имитировать это поведение.Blackberry - Smileys в текстовом поле

Я думал об использовании обычного текстового поля, а вместо смайликов вставлял пробелы, а затем размещал некоторые битмап-поля над текстовым полем, где должны быть смайлики. Проблема в том, что у меня нет надежного/быстрого способа нахождения позиции персонажа на экране (x, y).

Можете ли вы дать мне несколько идей?

Можете ли вы придумать другие подходы к этой проблеме?

Я уверен, что многие люди столкнулись с такой проблемой в свое время. Надеюсь, есть кто-то, кто сумел найти решение. Я достаточно отчаянный, чтобы принять любое решение, независимо от того, насколько сумасшедший/сложный/сложный.

Кроме того, я хотел бы использовать это в SDK 5.0 и выше, но я соглашусь только на 6.0.

+0

См. Соответствующие http://stackoverflow.com/questions/5683793/emoji-emoticons-on-blackberry-and-android-app-how-to-support –

+0

Уже сделано :) –

+0

См. Альтернативный ответ http: // stackoverflow .com/вопросы/7268276/blackberry-emoticons-in-chat-application/7861476 # 7861476 –

ответ

3

Что вы можете сделать, это создать пользовательский менеджер, который является контейнером для EditFields и BitmapFields. Когда пользователь нажимает на начальный EditField, который находится внутри вашего Менеджера и начинает печатать, вы позволяете им печатать, пока не захотите получить смайлик. Когда они выбирают его, вы создаете BitmapField сразу после EditField, а затем размещаете новый EditField справа от BitmapField. Вам нужно будет отслеживать такие вещи, как когда пользователь обращается к backspace и пустет EditField, он должен быть удален, а затем они выбирают BitmapField, а последующее backspace удаляет BitmapField и фокусирует внимание на предыдущем EditField.

Вам также нужно будет создать свой собственный EditField, который вы можете контролировать размер и BitmapField, который позволяет использовать backspace для его удаления.

Насколько я могу думать о будущем, вы не должны иметь никаких проблем с использованием этого для 5.0

Edit для комментариев:

Вы должны быть реализации собственного sublayout() из ваш Управляющий в любом подходе, который вы берете, поэтому вы знаете позиции, потому что вы тот, кто их там положил. Если вы хотите сделать многострочный (мой подход был для однострочного), вы можете сделать одну из трех вещей:

1.) Просто у меня есть новые EditFields для каждой строки и сделайте ссылку так же, как я говорил о том, где backspace отбрасывает вас в предыдущее поле, в этом случае последняя строка. Вы должны следить за тем, насколько велика область, основанная на тексте, и посмотреть, переместит ли она ее на следующую строку. Если он просто отрегулирует, где расположены поля EditFields.

2.) Вы можете разместить свое размещение изображений в многострочном поле, используя собственный EditField, который расширяет высоту, и в этом случае вы будете знать, где находится текст и какие строки вы находитесь. Рисование битмапа было бы вопросом расчета (какой номер строки вы) * (высота шрифта) и getAdvance (text_up_to_bitmap).

3.) Внесите свой собственный EditField, где у вас есть Focusable Manager, который вы вручную делаете с помощью всего чертежа. Вы можете проанализировать строку, которую вы сохраняете, от захвата штрихов и, возможно, иметь флаг, где должен быть смайлик. Нарисуйте текст перед ним, нарисуйте смайлик, затем продолжайте рисовать текст. Трудность в этом заключается в том, что вам придется делать такие вещи, как определение, где должен быть курсор, создание виртуальной клавиатуры и обработка некоторых других задач, которые EditField делает для вас.

+0

Я уже рассматривал этот подход. Есть две большие проблемы: –

+0

1. EditFields, макет, прямоугольники. Поэтому, когда у меня есть поле редактирования из двух или более строк, и я вставляю смайлик в середине строки, следующий EditField должен начинаться после смайлика, в последней строке предыдущего EditField, и его позиция X будет сразу после смайлик (где-то посередине экрана). Даже если предположить, что не будет никаких проблем с перекрывающимися линиями EditField, второй EditField будет рисовать текст с линиями, начиная с середины экрана. –

+0

2. Я не вижу никакого способа найти, где именно на экране я должен позиционировать смайлик. Мне нужен способ вычисления позиции последнего символа из EditField. Font.getHeight() и getAdvance() не очень помогают, потому что я не могу получить строки EditField (где заканчивается линия?). В зависимости от ширины EditField текст может быть перепланирован совсем по-другому. –