По сути, я использую метод Html.fromHtml для отображения текста в формате html внутри textView. Все отображается правильно, кроме маркеров элементов списка. Они обрезаются, как в этом случае (Точки маркеров в текстовом представлении обрезаны).
Что я здесь вижу(Точки маркеров в текстовом представлении обрезаны) а здесь (https://medium.com/ackee/how-to-make-bulletproof-bullet-lists-in-textview-223c54fb21e6) указывает, что в классе BulletSpan были некоторые ошибки, поэтому в более поздней версии (API lvl 28) они исправили это. Однако среди всего, что я пробовал, у меня сейчас есть: + Установлен API 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));
}
}
Таким образом, даже если он должен правильно отображать маркеры списка, это все равно не так. У меня есть правильный уровень API, установленный в Android Studio, поэтому я понятия не имею, как мне подойти к этой проблеме. Если есть что-то непонятное, спрашивайте. Есть идеи?
да, это неправильно, как вы правильно заметили. Однако я удалил все, чтобы проверить это, и оставил только это text = " <ol>\n" + " <li>One</li>\n" + " <li>Two</li>\n" + " <li>Three</li>\n" + " </ol>";, и оно все еще не отображается должным образом. это еще одна ошибка html с моей стороны?




Так что, судя по всему, он играет нормально, если уровень устройства не ниже 27 или выше. Я думал, что если компилируемая и целевая версии sdk будут достаточно высокими в gradle, на устройстве будет применяться фиксированная версия класса BulletSpan, даже если устройство более низкого уровня. Это предположение в корне неверно, поскольку уровень API устанавливаемого приложения совпадает с уровнем API, поддерживаемым устройством. Это означает, что если устройство поддерживает более низкий уровень API, то будет установлена версия класса BulletSpan с ошибками.
Причина, по которой он не отображал маркеры должным образом, заключается в неправильном формате HTML: 1. Обратная косая черта экранирует другую обратную косую черту, которая экранирует цитату (
\\’должно быть\’). 2. Вам не хватает закрывающего тега для последнего тега<p>(<p>This is an OL list:\n)