android, textview и MetricAffectingSpan

#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, в вашем примере действительно используются два абсолютных размера, но один НЕ находится внутри другого. Это то, что мне трудно сделать.