Intereting Posts
Цифровое поле пароля для Android Android: Почему я не могу создать обработчик в новом потоке Гладкое слайд-изображение в одну сторону GridView – иногда строки выровнены по высоте, иногда они выровнены по нижнему краю! Какие языки программирования можно использовать на Android Dalvik? Передача через Wi-Fi Direct Java: масштабирование карты Mapsforge при использовании онлайн-растровых изображений вместо автономного рендеринга Android WebView VS Phone Browser Android PhoneGap Plugin, панель пользовательского интерфейса, изменение размера WebView Добавление / удаление страниц в ViewPager динамически Не удалось получить информацию о подписке из API разработчика Google Play для Android Android WebView -> Показать WebArchive Изменение цвета фона элементов списка на Android Совместимость сеанса мультимедиа, не отображающая элементы управления Lockscreen на Pre-Lollipop Samsung Galaxy Tablet не позволяет вводить числа с плавающей запятой входы с типом «число»

«ComputeValuesWithHarfbuzz – нужно принудительно выполнить одиночный запуск» в Android 4: что это значит?

Мое приложение Android 4 генерирует длинные просмотры, добавляя несколько textviews в linearlayout . Это хорошо работает для всех моих элементов списка, кроме одного. Проблема в том, что список textviews прерывается после добавления первого textview , но исключение не выбрасывается!

Я просто вижу это предупреждение в своем LogCat:

TextLayoutCache | ComputeValuesWithHarfbuzz – нужно принудительно выполнить одиночный запуск

Кто-нибудь знает, что это значит?

Solutions Collecting From Web of "«ComputeValuesWithHarfbuzz – нужно принудительно выполнить одиночный запуск» в Android 4: что это значит?"

HarfBuzz – это механизм компоновки / форматирования шрифтов OpenType. Его цель – стандартизировать раскладку текста в проектах с открытым исходным кодом. Это предупреждение можно проследить до android / graphics / TextLayoutCache.cpp .

Соответствующий блок кода:

 ubidi_setPara(bidi, chars, contextCount, bidiReq, NULL, &status); //runs the algorithm int paraDir = ubidi_getParaLevel(bidi) & kDirection_Mask; // 0 if ltr, 1 if rtl if (U_SUCCESS(status) && rc == 1) { // Normal case: one run, status is ok isRTL = (paraDir == 1); useSingleRun = true; } else if (!U_SUCCESS(status) || rc < 1) { LOGW("computeValuesWithHarfbuzz -- need to force to single run"); isRTL = (paraDir == 1); useSingleRun = true; } else {...} 

Эта часть кода является частью алгоритма BiDi (uBiDi), который обозначает Unicode Bidirectional, как подробно описано здесь .

Данные на арабском, иврите или других языках RTL требуют обработки двунаправленного текста. Поскольку эти скрипты справа налево используют цифры, написанные слева направо, текст фактически двунаправлен: смесь текста справа налево и слева направо.

rc в приведенном выше примере – это пробег алгоритма. Каждому символу юникода присваивается уровень. (Даже неназначенные)

Текст сначала разбивается на разные уровни (Уровень 0 – это простой текст на английском языке, Уровень 1 – простой арабский текст, возможно, встроенный в текст на английском языке 0 и т. Д.)

Прогоны теперь происходят следующим образом.

  Levels: 0 0 0 1 1 1 2 Runs: <--- 1 ---> <--- 2 ---> <3> 

Счет запуска в приведенном выше примере равен 3. Предупреждение выдается, если алгоритм BiDi не смог запустить хотя бы один раз. Существует много ошибок, которые могут привести к успешному выполнению алгоритма. Любой из них мог вызвать предупреждение.

Однако, независимо от того, происходит ли предупреждение или нет, поведение кода точно идентично, за исключением предупреждения. Таким образом, это не должно влиять на работу приложения.