#android #html
#Android #HTML
Вопрос:
Я пытаюсь расширить возможности преобразования html в Android 4.4. Мне нужно иметь возможность произвольно изменять размер текста в блоке текста до абсолютного значения.
Итак, у меня есть начальный блок текста размером AbsoluteSizeSpan
примерно так :
ass = new AbsoluteSizeSpan(Integer.valueOf(18), true);
output.setSpan(ass, 0, 255, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Теперь, когда мне нужно изменить размер слова или предложения в пределах этого диапазона, я делаю то же самое снова —
ass = new AbsoluteSizeSpan(Integer.valueOf(12), true);
output.setSpan(ass, 100, 185, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Однако это не принимается во внимание.
Означает ли это, что это невозможно? Нужно ли мне что-то изменить в textview, чтобы разрешить это?
Комментарии:
1. Наличие одного
AbsoluteSizeSpan
внутри другого просто не работает . Смотрите Мой ответ для альтернативы.2. Однако я хотел бы понять, почему…
3. Я исправлен, я могу заставить эти вложенные области работать для простых случаев обратно в API 16. Теперь я бы никогда не стал делать это с текстом любой сложности, потому что код компоновки текста — это минное поле. Пожалуйста, обновите свой вопрос фрагментом кода, который завершается ошибкой, также сообщите нам, какой API вы используете. Что также может быть полезно, так это сведения о вашем макете
TextView
, поскольку ширина будет определять, где происходят разрывы строк, и появилось много странных ошибок при разрыве строк. Мне просто нужно достаточно информации, чтобы я мог ее воспроизвести. Возможно, даже снимок экрана? Я обновлю свой ответ.
Ответ №1:
AbsoluteSizeSpan ass18 = new AbsoluteSizeSpan(Integer.valueOf(18), true);
AbsoluteSizeSpan ass12 = new AbsoluteSizeSpan(Integer.valueOf(12), true);
output.setSpan(ass18, 0, 100, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
output.setSpan(ass12, 100, 185, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
output.setSpan(ass18, 185, 255, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Комментарии:
1. Казалось бы, это обходной путь, но все же один не вложен в другой. При обработке тегов html для этого потребуется вести отдельный список из них, а затем просматривать их каждый раз, когда появляется новый, чтобы разделить определение, если одно будет вложено в другое. Кажется излишним, если есть способ действительно вложить одно в другое.
Ответ №2:
Вы можете найти решение из примера по этой ссылке http://www.android—tutorials.com/2016/08/android-absolutesizespan-example.html?m=1
Комментарии:
1. Да, @Madhan, в вашем примере действительно используются два абсолютных размера, но один НЕ находится внутри другого. Это то, что мне трудно сделать.