Метод fromHtml неправильно форматирует HTML-текст на уровне API 28 - PullRequest
0 голосов
/ 06 июля 2019

В основном я использую метод Html.fromHtml для отображения текста в формате html внутри textView.Все отображается правильно, кроме маркеров элементов списка.Они обрезаются так же, как и в этом случае ( Пули в текстовом представлении обрезаются ).

Что я вижу здесь ( Пули в текстовом представлении обрезаются ) и здесь (https://medium.com/ackee/how-to-make-bulletproof-bullet-lists-in-textview-223c54fb21e6), указывает, что в классе BulletSpan были некоторые ошибки, поэтому в более поздней версии (API lvl 28) они исправили это. Однако, среди всего, что я пробовал, в настоящее время у меня установлено: + API lvl 28 установлен+ компилировать и целевую версию SDK в Gradle -> 28 + мин. версию SDK в Gradle -> 24 + устройство с Android 7.0 (что означает: API lvl24)

, и он по-прежнему показывает обрезанные пули

основной макет:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/basicTextView"
        android:layout_width="300dp"
        android:layout_height="400dp"
        android:text="Hello World!"
        android:layout_marginBottom="10dp"
        android:layout_marginStart="10dp"
        android:layout_marginEnd="10dp"
        android:layout_marginTop="10dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

основной код активности java:

import android.app.Dialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Html;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import static android.text.Html.FROM_HTML_MODE_LEGACY;

public class MainActivity extends AppCompatActivity {

    private TextView textview, basicTextView;
    private Button confirmButton;
    private String text;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        basicTextView = (TextView) findViewById(R.id.basicTextView);

        text = "<ul>\n" +
                "   <li>Morbi in sem quis dui placerat ornare. Pellentesque odio nisi, euismod in, pharetra a, ultricies in, diam. Sed arcu. Cras consequat.</li>\n" +
                "   <li>Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus.</li>\n" +
                "   <li>Phasellus ultrices nulla quis nibh. Quisque a lectus. Donec consectetuer ligula vulputate sem tristique cursus. Nam nulla quam, gravida non, commodo a, sodales sit amet, nisi.</li>\n" +
                "   <li>Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc.</li>\n" +
                "</ul>" +
                "<nav>\n" +
                "  <ul>\n" +
                "    <li><a href=\"#\">Home</a></li>\n" +
                "    <li><a href=\"#\">About</a></li>\n" +
                "    <li><a href=\"#\">Clients</a></li>\n" +
                "    <li><a href=\"#\">Contact Us</a></li>\n" +
                "  </ul>\n" +
                "</nav>" +
                "<h1>Main Title</h1>\n" +
                "        <h2>A sub-title</h2>\n" +
                "        <p>This is some html. Look, here\\'s an <u>underline</u>.</p>\n" +
                "        <p>Look, this is <em>emphasized.</em> And here\\'s some <b>bold</b>.</p>\n" +
                "        <p>This is a UL list:\n" +
                "        <ul>\n" +
                "        <li>One</li>\n" +
                "        <li>Two</li>\n" +
                "        <li>Three</li>\n" +
                "        </ul>\n" +
                "        <p>This is an OL list:\n" +
                "        <ol>\n" +
                "        <li>One</li>\n" +
                "        <li>Two</li>\n" +
                "        <li>Three</li>\n" +
                "        </ol>";

    basicTextView.setText(Html.fromHtml(text, FROM_HTML_MODE_LEGACY));
    }
}

Так что, хотя он должен правильно отображать маркеры списка, он все равно не работает.В Android Studio установлен соответствующий API lvl, поэтому я не знаю, как мне решить эту проблему. Если есть что-то непонятное, спросите. Есть идеи?

1 Ответ

0 голосов
/ 10 июля 2019

Итак, по-видимому, он играет правильно, если уровень устройства не ниже 27 или выше. Я подумал, что если бы компиляция и целевая версия sdk были достаточно высокими в gradle, то фиксированная версия класса BulletSpan могла бы применяться на устройстве, даже если устройство ниже lvl. Это предположение в корне неверно, поскольку уровень API приложения, которое будет установлено, совпадает с уровнем API, поддерживаемым устройством. Это означает, что если устройство поддерживает более низкий уровень API lvl, то будет установлена ​​версия ошибочного класса BulletSpan.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...