Действительно ли моноширинные шрифты Android имеют фиксированный размер?

Я использую шрифт Android Monospace для своей игры и обнаружил, что шрифт ведет себя не так, как ожидалось. Игра основана на том, что верхние символы и нижние подчеркивания выстраиваются в линию друг с другом в качестве подсказок для решения криптограммы. Однако, когда слово находится очень близко к краю TextView, как видно на 5-й строке, показанной на изображении, синяя строка текста переходит на следующую строку, в результате чего подсказки и ответы не синхронизируются.

Я использую TextView.setTypeface(Typeface.MONOSPACE) для обеих строк (ну... шрифт, очень близкий к нему - проблема возникает и с MONOSPACE).

Любые идеи, что может быть причиной этого и как это исправить?

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


person Uwais A    schedule 22.06.2016    source источник
comment
Все они должны быть одинаковой ширины, но похоже, что подчеркивание обрабатывается особым образом, попробуйте другой шрифт. Также посмотрите, есть ли такая же проблема с буквой W, возможно, макет ищет пробелы.   -  person zaph    schedule 22.06.2016
comment
Я проверил проблему с пробелами - та же проблема, что и на рис. Попробую другой шрифт...   -  person Uwais A    schedule 22.06.2016
comment
Вероятно, уменьшение или увеличение TextView на один пиксель (точку) должно решить проблему в этом случае.   -  person zaph    schedule 22.06.2016
comment
Да, у меня есть небольшое увеличение размера текста, и это решает проблему. Но я бы не хотел, чтобы мои пользователи имели с этим дело.   -  person Uwais A    schedule 22.06.2016


Ответы (1)


Вот и получается, что алгоритм TextView переноса текста НЕ так прост, как - помещается ли следующее слово в этой строке --> если не помещается на следующей строке.

Далее на этом скриншоте тексты, выделенные черным и синим цветом, различаются (один показывает автора цитаты, другой нет). Кажется, что TextView пытается минимизировать линии, и после того, как это было сделано, он минимизирует ширину. Учитывая, что два текста на скриншоте различаются примерно на 1 строку текста, маленькие слова в конце можно переставить, чтобы уменьшить ширину TextView. Вот что вызывает проблемы — шрифт (насколько я могу судить) на самом деле идеально моноширинный.

Я полагаю, что правильным решением этой проблемы является расширение TextView и создание пользовательского onDraw() для решения проблемы. Для меня было достаточно, чтобы два текста отображали одни и те же слова (но один из них был пропущен через шифр замены).

person Uwais A    schedule 22.06.2016