Почему TextView разрывает строку, если ширина строки равна ширине TextView - PullRequest
2 голосов
/ 09 июля 2019

У меня есть TextView, который textSize равен 3.Я хочу отобразить эту строку следующим образом:

String line = 
لورم  ایپسوم  متن  ساختگی  با  تولید  سادگی  نامفهوم  از  صنعت  چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای متنوع با هدف بهبود;

Я рассчитываю доступную ширину TextView для текста во время выполнения, реализуя интерфейс ViewTreeObserver.OnGlobalLayoutListener:

int textAreaWidth;
@Override
public void onGlobalLayout() {
    textAreaWidth = textView.getWidth() - (textView.getPaddingLeft() + textView.getPaddingRight());
}

Также я вычисляюширина line как здесь:

TextPaint textPaint = textView.getPaint();
float lineWidth = textPaint.measureText(line);

В Logcat Я вижу значения textAreaWidth и lineWidth:

textAreaWidth > 668
lineWidth > 668.0

Как вы видите textAreaWidthи lineWidth равны, но TextView разбивает line на 2 строк и отображает их:

لورم  ایپسوم  متن  ساختگی  با  تولید  سادگی  نامفهوم  از  صنعت  چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای متنوع با هدف 
بهبود

Почему TextView разбивает line, в то время как ширина строки равнаравна доступной ширине для текста?

Ответы [ 2 ]

1 голос
/ 09 июля 2019

Я добавляю это как ответ вместо комментария, потому что это относительно подробно, но, к сожалению, у меня нет точного ответа на ваш вопрос.

Я обычно использовал два разных метода для измерения текста:

  • TextPaint.measureText()
  • TextPaint.getTextBounds()

По моему личному опыту, первый лучше показывает точную меру ширины текста, а второй лучше дает точную меру высоты текста.

Однако ни один из методов не дает точного измерения точного размера, необходимого для текста (т. Е. Наименьшего ограничивающего прямоугольника, в который помещается текст) .

Мое (по общему признанию) понимание состоит в том, что TextView использует классы StaticLayout и DynamicLayout для измерения текста. Очень кратко изучив эти классы, я не вижу очевидного способа ответить «насколько широк этот текст будет»; вместо этого они, кажется, лучше отвечают «сколько строк будет у этого текста, учитывая N пикселей ширины».

Надеюсь, это поможет вам в правильном направлении.

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

Если вы хотите, чтобы это была одна строка, используйте свойство maxlines TextView:

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