Intereting Posts
Android: ListView с кнопками -> OnItemClick ничего не делать Установите новый макет в фрагменте HttpURLConnection getResponseCode () deos не возвращается, если нет подключения к Интернету Запуск startLeScan в текущий api Android: Как создать каталог на SD-карте и скопировать файлы из / res / raw? Loopj Android Async Http – onFailure не запущен Андроид не позволяет EditText автоматически запрашивать фокус Потребительский поток для Android в приложении Загружать изображения в Html.fromHtml в текстовом виде (http url images, Base64 url ​​images) Существуют ли альтернативы облачным сообщениям Google для пользовательских сборок Android? Как остановить навигацию по ActionBar Tab для отображения в качестве счетчика, когда он становится слишком длинным? Google Cloud Messaging (GCM) – невозможно создать экземпляр получателя – java.lang.ClassNotFoundException Изменить стиль ProgressDialog Проблемы с аутентификацией ASP.NET Forms на Phonegap (Android) Синхронизация контактов с моим собственным приложением, например skype или whatsapp

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()); } }