Android TextView: получение "W/StaticLayout: maxLineHeight не должно быть -1. MaxLines: 1 строкаCount: 1" при настройке текста
Я устанавливаю некоторый текст в TextView каждые 0,5 секунды на основе таймера. Каждый раз, когда таймер работает и текст установлен, я получаю это предупреждение, спам в моей консоли.
W/StaticLayout: maxLineHeight не должно быть -1. maxLines: 1 lineCount: 1
XML-код:
<RelativeLayout 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">
<TextView
android:id="@+id/title_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp"
android:layout_marginTop="12dp"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@color/white"/>
<TextView
android:id="@+id/time_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingEnd="4dp"
android:paddingStart="12dp"
android:textColor="@color/white"
android:textSize="12sp"
tools:text="0:00" />
</RelativeLayout>
Java-код:
public void setProgress() {
// setProgress() called every 0.5 seconds
// Hardcoded text
mTimeText.setText("0:05");
}
Ответы
Ответ 1
Отвечая на мой собственный вопрос.
Обратите внимание, что у меня есть два TextView title_text
и time_text
.
Комментируя //mTimeText.setText("0:05");
, проблема в том, что сообщение об ошибке было отправлено спамом, поэтому я подумал, что проблема должна была что-то сделать с time_text
, но это не так.
Это связано с title_text
. Обратите внимание, как я установил свойства android:maxLines="1"
и android:ellipsize="end"
. Если бы у меня был текст, который переполнял бы предел maxLines
и запускал эллипсы, тогда я получил бы предупреждающее сообщение. Удаление строки android:ellipsize="end"
решило проблему. Однако мне нужны эллипсы, чтобы они не работали.
Единственное другое решение, которое я смог найти, заключается в замене android:maxLines="1"
на android:singleLine="true"
, однако свойство xml устарело!
Поэтому я просто устанавливаю mTitleText.setSingleLine(true)
программно в свой java-код. Этот метод не устарел, поэтому я думаю, что я в явном виде.
Что касается того, почему комментирование //mTimeText.setText("0:05");
предотвратило появление предупреждающего сообщения, я действительно не знаю. Я в тупике на этом.
Ответ 2
Я решил эту проблему, изменив конфигурацию TextView layout_height
с wrap_content
на match_parent
. Определение фиксированной layout_height
- это еще один способ ее решения.
Примеры:
android:layout_height="wrap_content"
или android:layout_height="20dp"
Ответ 3
Это ошибка в Android, которая помечена как исправленная, поэтому нам придется подождать следующего патча: https://issuetracker.google.com/issues/121092510