HTML оформление текста из string через JAVA

375
10 декабря 2016, 10:42

Доброе утро, коллеги! У меня есть текст в string

Он расположен между: <string name="txt_1"><![CDATA[ и ]]></string>. Я вызываю его в TextView разметки (webview не подходит - не советуйте). Подключаю возможность применения html и класс MyHtmlTagHandler в этом TextView:

mSelectedItemView2.setText(Html.fromHtml(string2, null, new MyHtmlTagHandler()));

Подключение html позволяет использовать тег <blockquote>, что является аналогом не поддерживающегося <hr> - линия разделитель. Но если поместить текст между <blockquote> и </blockquote>, то линия разделитель не горизонтальная, а почему-то вертикальная слева. Поэтому первый вопрос: как сделать горизонтальной?

Далее нужно создать выделение текста как на фото. . Я предполагаю как это сделать. Необходимый текст поместить между <blockquote> и </blockquote> - зеленая вертикальная линия. А серое выделение текста, скорее всего с помощью <div> и </div>. Но как создать стиль для <div>? В классе MyHtmlTagHandler прописать, но как это сделать не понимаю. Это второй вопрос.

Последний вопрос. Есть маркированный список в html:

    <ul>
     <li>Какой-то текст_1 </li>
     <li>Какой-то текст_1 </li>
    </ul>

И, поскольку простое подключение html не поддерживает тег , то пришлось прописать это в java:

 private void processUlOlLi(boolean opening, String tag, Editable output)
    {
        if (tag.equalsIgnoreCase("ul"))
        {
            if (opening)
            {
                lists.push(tag);
            }
            else
            {
                lists.pop();
            }
        }
        else if (tag.equalsIgnoreCase("ol"))
        {
            if (opening)
            {
                lists.push(tag);
                olNextIndex.push(1);//TODO: add support for lists starting other index than 1
            }
            else
            {
                lists.pop();
                olNextIndex.pop();
            }
        }
        else if (tag.equalsIgnoreCase("li"))
        {
            if (opening)
            {
                if (output.length() > 0 && output.charAt(output.length() - 1) != '\n')
                {
                    output.append("\n");
                }
                String parentList = lists.peek();
                if (parentList.equalsIgnoreCase("ol"))
                {
                    start(output, new Ol());
                    output.append(olNextIndex.peek().toString()).append(". ");
                    olNextIndex.push(olNextIndex.pop() + 1);
                }
                else if (parentList.equalsIgnoreCase("ul"))
                {
                    start(output, new Ul());
                }
            }
            else
            {
                if (lists.peek().equalsIgnoreCase("ul"))
                {
                    if (output.length() > 0 && output.charAt(output.length() - 1) != '\n')
                    {
                        output.append("\n");
                    }
                    // Nested BulletSpans increases distance between bullet and text, so we must prevent it.
                    int bulletMargin = indent;
                    if (lists.size() > 1)
                    {
                        bulletMargin = indent - bullet.getLeadingMargin(true);
                        if (lists.size() > 2)
                        {
                            // This get's more complicated when we add a LeadingMarginSpan into the same line:
                            // we have also counter it's effect to BulletSpan
                            bulletMargin -= (lists.size() - 2) * listItemIndent;
                        }
                    }
                    BulletSpan newBullet = new BulletSpan(bulletMargin);
                    end(output,
                            Ul.class,
                            new LeadingMarginSpan.Standard(listItemIndent * (lists.size() - 1)),
                            newBullet);
                }
                else if (lists.peek().equalsIgnoreCase("ol"))
                {
                    if (output.length() > 0 && output.charAt(output.length() - 1) != '\n')
                    {
                        output.append("\n");
                    }
                    int numberMargin = listItemIndent * (lists.size() - 1);
                    if (lists.size() > 2)
                    {
                        // Same as in ordered lists: counter the effect of nested Spans
                        numberMargin -= (lists.size() - 2) * listItemIndent;
                    }
                    end(output,
                            Ol.class,
                            new LeadingMarginSpan.Standard(numberMargin));
                }
            }
        }
    }

Все работает, но есть ли возможность 1) увеличить размер точек (маркеров) и 2) сделать отступ слева больше, чтобы было визуально виден список. Сейчас точки располагаются на одном вертикальном уровне с основным текстом. Естественно &nbsp в string не помогли. Решать нужно в java классе, но не вижу как.

Сам текст можно отодвинуть изменив эту строчку в классе:

private static final int indent = 10;

Но точки остаются на месте. Заранее благодарю всех, кто поможет в решении данных проблем.

READ ALSO
Не отображается картинка в тэге &lt;img src&gt;

Не отображается картинка в тэге <img src>

Добрый деньСделал страничку, на которой отображаю картинку из тэга img src"", но она не отображается до того, как не откроешь браузер с нуля

290
Не работает position relative

Не работает position relative

Есть такая разметка

342
Div + float: как растянуть div по высоте?

Div + float: как растянуть div по высоте?

Пытаюсь сделать таблицу из 2 колонок при помощи CSS:

308
Почему мышь плохо цепляется за элемент?

Почему мышь плохо цепляется за элемент?

Картинка разделена на 9 квадратиков, если взяться за правый нижний и потянуть, то потянется сам контент, а потом, когда отпустишь, область...

314