Переносы в Android - PullRequest
       72

Переносы в Android

39 голосов
/ 16 декабря 2010

В рамках интернационализации приложения Android я столкнулся с необходимостью динамически переносить слова или переносить слова в нужной позиции.

Все мои строки выводятся в файлах strings.xml, но я не нашел никакой документациио переносе слов в Android.

Я хотел бы предложить варианты переноса слов, подобные тому, как я могу сделать это в LaTeX:

http://en.wikipedia.org/wiki/Hyphenation_algorithm

Но я ненашел какие-либо указания, если это возможно.Есть ли что-то в рамках, что я пропустил?Что делают другие люди, например, с японскими строками, у которых нет очевидной позиции разбить предложение?Вы просто добавляете пробелы в правильных позициях?

Я мог бы динамически изменять размер шрифта, чтобы он соответствовал определенным макетам, но для более длинных сообщений, проходящих через несколько строк, не будет работать.Что делать?

Ответы [ 6 ]

7 голосов
/ 09 сентября 2012

Управление переносами строк может быть хлопотным. Лучшим вариантом является использование управляющих символов модификатора разрыва строки UTF, так как Android поддерживает полную UTF

Я знаю, что кто-то упомянул "мягкий дефис", но есть еще немало.

Вы также можете использовать «Zero Width Space» между словами на языках, где пробелы отсутствуют, поэтому вам не нужно полагаться на толкование словаря. Вы также можете использовать это в качестве мягкого дефиса в языках, которые позволяют разбивать определенные слова на строки в определенных точках.

При использовании составного слова, которое вы не хотите разбивать, но хотите, чтобы система преобразования текста в речь распознала его правильно, вам следует использовать символ «Разделитель слов». Не используйте «Zero Width Non Breaking Space», так как он устарел из-за его использования в качестве спецификации.

Наконец, если вы хотите пробел, но не хотите разрыв строки, используйте простой неразрывный пробел.

5 голосов
/ 21 сентября 2017

Это новая вещь от Android 6. Marshmellow.

Попробуйте добавить это в свой TextView xml

android:hyphenationFrequency="none"
5 голосов
/ 15 января 2015

Следующая библиотека поддерживает переносы. Он делает все типы выравнивания текста (влево / вправо / по центру / по правому краю) и переносы слов для вас. Не все языки были добавлены, но могут быть добавлены по мере необходимости. Эта библиотека использует NO WEBVIEWS и SUPPORTS SPANNABLES и позволяет LONG TEXT .

БИБЛИОТЕКА : https://github.com/bluejamesbond/TextJustify-Android

ANDROID : от 2,2 до 5X

SETUP

DocumentView documentView = addDocumentView(new StringBuilder("Your long text content"), DocumentView.PLAIN_TEXT);
documentView.getDocumentLayoutParams().setTextAlignment(TextAlignment.JUSTIFIED);
documentView.getDocumentLayoutParams().setHyphenator(new Hyphenator(HyphenPattern.PT));
documentView.getDocumentLayoutParams().setHyphenated(true);
4 голосов
/ 04 февраля 2016

Мягкий дефис работал на устройстве Samsung Galaxy, начиная с Android 4.3.

<!-- key combination to enter soft hyphen: [Alt Gr]+[-] or [Alt]+240 on German PC, see https://de.wikipedia.org/wiki/Weiches_Trennzeichen#Darstellung_auf_Computersystemen -->
<string name="no_connection">Nicht ver-bund-en</string>

enter image description here

Поскольку мой вариант использованиябыл довольно узким, я просто использовал один мягкий дефис в слове "verbunden".Юникод \ u00ad не имел никакого эффекта.

2 голосов
/ 11 ноября 2016

Вопрос старый, но я нашел лучшее решение для меня:

Я должен сказать, что я программирую на Xamarin, поэтому код на C #, но не должен быть проблемой для переноса на Java.

Я использовал логику NHyphenator (https://github.com/alkozko/NHyphenator) для вставки SoftHyphens (символ UTF8 - 0x00AD), чтобы Textview делал переносы в нужном месте.

Чтобы получить переносы для других языков, я использовал словари openoffice. например я должен был получить перенос слов для немецко-швейцарского языка

http://extensions.openoffice.org/en/search?f[0]=field_project_tags%3A157 1. Скачать расширение 2. Распакуйте его с помощью WinRar или чего-то еще 3. Скопируйте файл hyph_xx_xx / hyph_xx_xx.dic 4. Добавьте новый язык в класс Hyphenator

Файлы ресурсов NHyphernator объявлены как: hyph-xx-xx.pat.txt -> содержимое файла dic без комментариев hyph-xx-xx.hyp.txt -> файл, содержащий исключения из слов, где логика переноса не дает правильных результатов

Если кому-то нужна портативная Библиотека для Xamarin, просто скажите, я могу загрузить ее.

EDIT:

В TExtview должна быть установлена ​​сбалансированная стратегия взлома. Уровень API> 23, иначе не используйте стратегию взлома.

EDIT:

Вот код моно / ксамарин: https://github.com/sma84/NHyphenator-Mono

0 голосов
/ 16 декабря 2010

setEllipsize может помочь, если эта ошибка все еще исправлена.

...