Подтвердить что ты не робот

Перенос в Android

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

Следующая библиотека поддерживает перенос. Он выполняет все типы выравнивания текста (влево/вправо/в центре/оправдано) и переносы для вас. Не все языки добавлены, но могут быть добавлены по мере необходимости. В этой библиотеке используются НЕТ WEBVIEWS и ПОДДЕРЖИВАЮТ СПАВЛАНТЫ, а для ДОЛЖЕН ТЕКСТ.

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

ANDROID: от 2.2 до 5.X

НАСТРОЙКИ

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);

Ответ 3

Мягкий дефис работал на устройстве 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>

введите описание изображения здесь

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

Ответ 4

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

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

Я использовал логику NHyphenator (https://github.com/alkozko/NHyphenator) для вставки SoftHyphens (UTF8 Symbol - 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:

В breakstategy должен быть установлен Balanced в TExtview. API Level > 23, иначе не используйте breakstrategy.

EDIT:

Здесь код mono/xamarin: https://github.com/sma84/NHyphenator-Mono

Ответ 5

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

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

android:hyphenationFrequency="none"

Ответ 6

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