- Как написать свою клавиатуру для Android
- Кодировка Utf-8 для Android
- Android, UTF8 – Как обеспечить, чтобы UTF8 использовался для общих предпочтений
- problem with utf-8 charset in filename #82
- Comments
- asafbennatan commented Jan 19, 2016
- alexbbb commented Jan 19, 2016
- problem with utf-8 charset in filename #82
- Comments
- asafbennatan commented Jan 19, 2016
- alexbbb commented Jan 19, 2016
Как написать свою клавиатуру для Android
Здравствуйте. В данной статье я постараюсь рассказать и показать основные моменты написания собственной клавиатуры для Android’а. Статья предназначена для разработчиков, которые с этим не сталкивались, но имеют опыт знакомства с Android’ом.
Сразу оговорюсь, что мнение и код автора не являются истинной в последней инстанции, а ваши предложения и критика лишь приветствуются. И если не охота все читать, ссылка на исходники в конце статьи.
Для начала необходимо создать пустой Android проект без Activity. После этого приступим к подготовке .xml файлов, которые будут описывать Android’у нашу клавиатуру.
Базовый layout-файл, keyboard.xml
Содержит в себе View класс Android’а под названием KeyboardView и описывает внешний вид клавиатуры.
- android: keyPreviewHeight — задает высоту элемента подсказки, на котором отображается текущая нажатая клавиша.
- android:keyPreviewLayout — указываем layout-файл, который описывает внешний вид preview’шки.
Код preview:
Важный момент, атрибут background является обязательным, если его не указать, то при каждом нажатии клавиши ваша клавиатура будет падать.
Итак, мы подготовили 2 .xml файла, которые описывают внешний вид, теперь настал черед описать саму раскладку клавиатуры. Назовем этот файл keys_definition_ru.xml и находится он будет в xml ресурсах проекта. Здесь будет представлен лишь его кусок, так как файл достаточно большой.
Все атрибуты описывать не будем, лишь «не очевидные».
- android:horizontalGap — горизонтальный отступ между клавишами
- android: verticalGap — вертикальный отступ
- android:codes — код нужного символа в html utf-8 (и не только utf-8, подробнее в оф. документации)
- android:keyEdgeFlags — атрибут может применять значение left или right. Эти атрибуты добавляются клавишам, которые расположены в самом левом крае или самом правом крае клавиатуры
- android:isRepeatable — повторять действие клавиши при долгом нажатии (обычно используется на пробеле или backspace)
Заключительный файл — описание локализаций (подтипов инпута):
InputMethodService — сервис клавиатуры
Теперь, после того как мы создали все необходимые xml файлы, приступаем к описанию сервиса, который будет слушать события InputMethod.
Для этого создадим сервис, наследуясь от InputMethodService и сразу реализуем интерфейс KeyboardView.OnKeyboardActionListener. В итоге у вас получиться набор методов, которые вы можете переопределить и наполнить необходимой функциональностью, которые позволяют широко кастомизировать вашу клавиатуру. Но здесь я приведу лишь примеры базовых моментов.
Одним из методов жизненного цикла InputMethodService является onCreateInputView внутри которого мы создаем View клавиатуры и привязываем к ней необходимые листенеры.
Событие onKey срабатывает между onPress и onRelease, на вход им подается код нажатой клавиши.
Итак, все готово… почти, осталось добавить наш сервис в манифест.
Поздравляю, вы написали свою первую клавиатуру!
Источник
Кодировка Utf-8 для Android
У меня проблема с кодировкой utf-8.
Я извлекаю из данных базы данных MySQL, отформатированных в UTF-8 (с большим количеством китайских символов) с Java, и я помещаю их в некоторые файлы txt: (это пример .. у меня много данных)
С этими txt-файлами я создам некоторый TextView, который я использую, чтобы заполнить некоторые действия в моем приложении для Android, но не все символы правильно отображаются: большинство из них верны, но некоторые из них не распознаются, а они показаны как черные Бриллиант с белым вопросительным знаком внутри.
Я также пробовал с этим: но я получил худшие результаты
Кто-нибудь есть идеи? благодаря!
Изменить i подключиться к моей БД с помощью:
И когда я выполняю в БД запрос:
Я получаю результат
Поэтому я думаю, что DB кодируется в UTF-8, и мое соединение с ним может обрабатывать UTF-8
Вам нужно выяснить, в какой фазе это происходит: 1- Где вы загружаете текст из базы данных и 2-, где вы записываете их в файл.
Следует отметить, что ваша база данных должна быть создана с кодировкой UTF-8, и ваше соединение также должно ее поддерживать. Примером URL-адреса соединения JDBC, который поддерживает UTF-8, может быть:
Симптом, который вы наблюдаете после указания кодировки в getBytes («UTF-8»), является четким указанием на то, что то, что вы получаете из базы данных, не находится в UTF-8.
Также попробуйте преобразовать из кодировки, которую вы подозреваете в данных (например, ISO-8859-1):
@ Houman001 прав. Вы должны будете заботиться в течение этой двух процедур.
У меня есть одна и та же проблема с арабским текстом до нескольких дней. Но теперь я решил это. Я решил это, сделав его для записи в базу данных с кодировкой UTF-8. А также использовать некоторый арабский шрифт, предоставленный моим разработчиком шрифтов. Который приводит меня к тексту на арабском языке, как я хочу.
Поэтому, будьте внимательны во время разбора и передачи данных от одного к другому и убедитесь, что он находится в формате кодирования UTF-8.
Надеюсь, эта вещь поможет вам.
Для подключения к базе данных я использовал это для всех UTF-8, и он работает хорошо
Это класс, который вы можете использовать, просто отредактируйте информацию о своем имени пользователя, пароле и имени базы данных
Когда вы хотите отправить данные с сервера на Android, попробуйте это
На андроиде (или любом получателе данных) попробуйте это
Источник
Android, UTF8 – Как обеспечить, чтобы UTF8 использовался для общих предпочтений
Как обеспечить, чтобы UTF8 использовался для общего меню предпочтений? У меня есть меню настроек Android, которое позволяет пользователю указать свое имя, среди прочего.
Мне нужно знать, как преобразовать данные, хранящиеся в общих предпочтениях, в формат UTF8
Меню предпочтений выложено в xml с использованием кодировки utf8 в файле с параметрами в папке res / xml и выглядит так:
Класс, который обрабатывает это,
Я предположил, что установка Гарантирует, что текст будет закодирован в формате UTF8, но это не всегда так. Я получаю значения во всех форматах. Некоторые примеры
«: – $ B-) O: -): – P = -ob -): – D: -Q: -X: -: – |! \ П: ‘(: – * XDo_O: -X: -C: -X: O: -X = -O; -): -): -); -): – D: OX- (o_O: -V: – @: – V: -X: -Do_O :: – C \ XBF \ xÀ1 \ xÀ1 \ XAB \ Xbb \ XAE \ xA9 ^ \ xA5 \ xA5? [\ xÀ2>? \ xÀ2 \ xÀ2 \ xA5 \ XA3? $ \ XBF \ xÀ1 \ XAE \ xA7> \xB0]\xA3?\xA7\xA1\\\xAB\xBB\xAE^«]]||||><_| ] ||| \ xB0 \ xB0? "
Да, это один набор рубинов в последнем примере.
Проблемы, которые я запускаю при попытке отправить nmes в качестве запроса json HTTP POST или PUT на мой веб-сервер, используя следующий код
Это вызывает всевозможные проблемы на моем веб-сервере, которые ожидают действительный JSON (то есть UTF8), поскольку JSON следует отправлять в кодировке UTF8 в первую очередь.
1) Почему Действительно устанавливает кодировку UTF8? При использовании в макете?
2) Как лучше всего гарантировать, что я всегда получаю действительные символы формата UTF8, отправленные на мой веб-сервер? Должно ли это обрабатываться запросом put или кодом, который сохраняет общее предпочтение или или кодом, который заполняет json-объект или, возможно, комбинацию из вышеперечисленного? или что-то другое?
Это следует из этого вопроса RoR. Rails 3 – Как обрабатывать ошибку PG неполный многобайтовый символ
Ключ должен понять разницу между UTF-8 и Unicode .
- Java обрабатывает символы и строки в памяти с помощью Unicode. Каждый символ хранится в двух байтах.
- Когда текст передается между процессами (например, на веб-сервер) или записывается в / считывание с диска, внутреннее представление преобразуется в формат, отличный от проводного. Это кодирование или декодирование. UTF-8 является самым популярным, но в других форматах:
- UTF-16
- ISO 8859-1
В вашем вопросе вы упомянули, что XML-файлы закодированы в utf-8: это хорошо, и вы сможете помещать в файлы иностранных символов, но это указывает кодировку только для этого конкретного XML-файла .
Эти XML-файлы будут скомпилированы в ресурсы Android и будут содержать правильные значения (вы можете проверить это, если хотите, в отладчике или сохранить промежуточные файлы ресурсов Java из цепочки сборки).
Проблема почти наверняка заключается в том, что вы отправляете данные и получаете данные с HTTP-сервера, в частности, где эти данные преобразуются между байтами в сети и Java String . В настоящее время вы не устанавливаете его в запросе – это можно сделать, как описано в документации для Apache HTTPClient .
Хотя сервер может уже потребовать / предположить это, это, безусловно, хорошо, чтобы четко указывать в запросе.
Вам также необходимо убедиться, что сервер (тот, что в Rails 3 – как обрабатывать ошибку PG Error неполный многобайтовый символ ):
- Ожидает UTF-8
- Декодирует запрос с использованием декодера UTF-8
- Кодирует ответ с использованием кодировки UTF-8
(Извините, но я не знаю Ruby on Rails, поэтому я не знаю, как конкретно помочь там).
Вернувшись в конец Android, вам также необходимо убедиться, что ваша библиотека HTTP декодирует ответ с помощью декодера UTF-8. Если вы справитесь с этим сами, убедитесь, что этот конструктор String вы используете, а аргумент – «utf-8»:
- Public String (byte [] data, String charsetName)
После того, как клиент и сервер используют UTF-8, ваши проблемы будут решены.
Чтобы помочь отладке здесь, я предлагаю:
- Несколько операторов ведения журнала на сервере и клиенте, которые печатают соответствующие строки как можно ближе к HTTP-коду
Запуск с клиентом, настроенным для разговора через прокси-сервер отладки. Изучите запрос и ответ и убедитесь, что они действительно UTF-8. Прокси включают:
Источник
problem with utf-8 charset in filename #82
Comments
asafbennatan commented Jan 19, 2016
hi ,
i am using android-upload-service to upload a file with filename written in hebrew (utf-8 encoding),
on the other end i’m getting . instead of the filename,
is there any way to set the charset ?
(i have currently tried setting the content-type to :multipart/form-data; charset=utf-8 but this breaks the upload entirely as the server returns error)
Thanks.
The text was updated successfully, but these errors were encountered:
alexbbb commented Jan 19, 2016
Hi,
the behaviour you described is perfectly normal. I’m going to explain you why.
First, setting the content type as you’ve done is wrong and it’s normal that your server side complains about it. The content type specifies the MIME type of the file and has nothing to do with the filename.
Android Upload Service is compliant to RFC2388. In section 4.4 is stated that:
The original local file name may be supplied as well, either as a
«filename» parameter either of the «content-disposition: form-data»
header or, in the case of multiple files, in a «content-disposition:
file» header of the subpart. The sending application MAY supply a
file name; if the file name of the sender’s operating system is not
in US-ASCII, the file name might be approximated, or encoded using
the method of RFC 2231.
In the current release 1.6 and in the upcoming 2.0, the filename is encoded in US-ASCII (as you can see here) and RFC 2231 is not supported. I suggest you to use ASCII file names though, to have the maximum compatibility across all the platforms and servers.
I’ve worked on projects where upload of cyrillic filenames were involved and I’ve always used ASCII file names. If you need to know the original file name, as a quick fix you can simply pass it as a request parameter, which is encoded in UTF-8 and then use it on your server side.
Источник
problem with utf-8 charset in filename #82
Comments
asafbennatan commented Jan 19, 2016
hi ,
i am using android-upload-service to upload a file with filename written in hebrew (utf-8 encoding),
on the other end i’m getting . instead of the filename,
is there any way to set the charset ?
(i have currently tried setting the content-type to :multipart/form-data; charset=utf-8 but this breaks the upload entirely as the server returns error)
Thanks.
The text was updated successfully, but these errors were encountered:
alexbbb commented Jan 19, 2016
Hi,
the behaviour you described is perfectly normal. I’m going to explain you why.
First, setting the content type as you’ve done is wrong and it’s normal that your server side complains about it. The content type specifies the MIME type of the file and has nothing to do with the filename.
Android Upload Service is compliant to RFC2388. In section 4.4 is stated that:
The original local file name may be supplied as well, either as a
«filename» parameter either of the «content-disposition: form-data»
header or, in the case of multiple files, in a «content-disposition:
file» header of the subpart. The sending application MAY supply a
file name; if the file name of the sender’s operating system is not
in US-ASCII, the file name might be approximated, or encoded using
the method of RFC 2231.
In the current release 1.6 and in the upcoming 2.0, the filename is encoded in US-ASCII (as you can see here) and RFC 2231 is not supported. I suggest you to use ASCII file names though, to have the maximum compatibility across all the platforms and servers.
I’ve worked on projects where upload of cyrillic filenames were involved and I’ve always used ASCII file names. If you need to know the original file name, as a quick fix you can simply pass it as a request parameter, which is encoded in UTF-8 and then use it on your server side.
Источник