Intereting Posts
Метод, вызванный после исключения release (), не смог возобновить работу с камерой android Как поместить текст слева от переключателя в андроиде Как получить битмап из drawable, определенного в xml? Опубликованный Android apk дает ошибку «Файл пакета не был подписан правильно» Невозможно просмотреть отчет трассировки HTML, созданный инструментом Systrace в Android SDK Задайте пункт меню, как отмечено из кода Как записать экран Android с Android Studio? Как я могу использовать ORMLite с SQLCipher вместе в Android? Как убить все запущенные приложения в Android? Android TextView: изменение цвета текста при нажатии Фильтры списка заданий для установленных пакетов Android: Как хранить файлы cookie? Имеются ли в операционной системе Android такие файлы, как / etc / passwd, / etc / shadow и / etc / group? Какой андроид: inputType следует использовать для ввода IP-адреса? Ошибка Android Studio: «Переменная среды не указывает на действительную установку JVM»

GetMeasuredHeight () TextView с завернутым текстом

Я пытаюсь определить высоту TextView до его рисования. Для этого я использую следующий код:

 TextView textView = (TextView) findViewById(R.id.textview); textView.setText("TEST"); int widthSpec = MeasureSpec.makeMeasureSpec(LayoutParams.MATCH_PARENT, MeasureSpec.EXACTLY); int heightSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); textView.measure(widthSpec, heightSpec); System.out.println("MeasuredHeight: " + textView.getMeasuredHeight()); 

Выход: MeasuredHeight: 28 . Ничего плохого в этом.

Однако, когда я даю TextView длинную текстовую строку, поэтому происходит перенос, она по-прежнему дает высоту одной строки вместо двух:

 (...) textView.setText("TESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTEST"); (...) 

Выход: MeasuredHeight: 28 , где я ожидал бы MeasuredHeight: 56 .

Почему он не дает мне правильного значения и как я могу достичь нужного значения?

Solutions Collecting From Web of "GetMeasuredHeight () TextView с завернутым текстом"

Это метод onCreate. Вся ваша иерархия представлений пока не измерена и не составлена. Поэтому родитель TextView не знает, что это ширина. Вот почему параметры textView не ограничены размерами родителя.

Попробуйте изменить строку:

 int widthSpec = MeasureSpec.makeMeasureSpec(200, MeasureSpec.EXACTLY); 

Так что ваша ширина текста равна 200 пикселям.

Если вы объясните, зачем вам нужна высота текста, мы сможем вам помочь.

Да, я недавно столкнулся с этим сам. Лучший способ – создать объект ViewTreeObserver и зарегистрировать ViewTreeObserver.OnGlobalLayoutListener. Это будет вызываться после фазы компоновки и до фазы рисования. В этот момент вы сможете получить размер вашего TextView.

Это не будет строго говоря языком, а для всего TextView. Если есть внутреннее дополнение, фактический текст будет меньше, чем TextView.

Если вам действительно нужны размеры фактического текста, используйте textView.getLayout() чтобы получить объект Layout для текста, а затем используйте layout.getHeight ().

Вы должны создать Custom Textview и использовать его в своих макетах и ​​использовать функцию высоты getActual для установки высоты во время выполнения

  public class TextViewHeightPlus extends TextView { private static final String TAG = "TextViewHeightPlus"; private int actualHeight=0; public int getActualHeight() { return actualHeight; } public TextViewHeightPlus(Context context) { super(context); } public TextViewHeightPlus(Context context, AttributeSet attrs) { super(context, attrs); setCustomFont(context, attrs); } public TextViewHeightPlus(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); actualHeight=0; actualHeight=(int) ((getLineCount()-1)*getTextSize()); } }