Как измерить высоту TextView на основе ширины и размера шрифта устройства?

Я ищу метод в Android, который будет принимать входные данные (text, text_font_size, device_width), и на основе этих вычислений он вернет, сколько высоты потребуется для отображения определенного текста?

Я устанавливаю время просмотра текстового представления / веб-просмотра на основе его содержимого, я знаю о содержимом warp, но не могу использовать в своем случае из-за некоторой проблемы с минимальной высотой веб-представления.

Поэтому я пытаюсь вычислить высоту и на основании этого устанавливаю высоту представления.

Я пробовал следующие способы

Paint paint = new Paint(); paint.setTextSize(text.length()); Rect bounds = new Rect(); paint.getTextBounds(text, 0, 1, bounds); mTextViewHeight= bounds.height(); 

Таким образом, выход

1) «Hello World» возвращает высоту 13 для шрифта 15

2) «Последняя версия Jelly Bean здесь, с оптимизацией производительности» возвращает высоту 16 для шрифта 15

Затем я попытался

 Paint paint = new Paint(); paint.setTextSize(15); paint.setTypeface(Typeface.SANS_SERIF); paint.setColor(Color.BLACK); Rect bounds = new Rect(); paint.getTextBounds(text, 0, text.length(), result); Paint.FontMetrics metrics = brush.getFontMetrics(); int totalHeight = (int) (metrics.descent - metrics.ascent + metrics.leading); 

Таким образом, выход

1) «Hello World» возвращает высоту 17 для шрифта 15

2) «Последняя версия Jelly Bean здесь, с оптимизацией производительности» возвращает высоту 17 для шрифта 15

если я установил эти значения для своего представления, тогда это сократит текст, не показывая весь контент.

Снова он выглядит нормально на некоторых таблицах, поскольку он имеет большую ширину, но не по телефону.

Есть ли способ вычислить высоту по содержанию?

 public static int getHeight(Context context, String text, int textSize, int deviceWidth) { TextView textView = new TextView(context); textView.setText(text); textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); int widthMeasureSpec = MeasureSpec.makeMeasureSpec(deviceWidth, MeasureSpec.AT_MOST); int heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); textView.measure(widthMeasureSpec, heightMeasureSpec); return textView.getMeasuredHeight(); } 

Если textSize не задано в пикселях, измените первый параметр setTextSize() .

Paint.getTextBounds() возвращает не то, что вы ожидаете. Подробности здесь .

Вместо этого вы можете попробовать:

 int mMeasuredHeight = (new StaticLayout(mMeasuredText, mPaint, targetWidth, Alignment.ALIGN_NORMAL, 1.0f, 0.0f, true)).getHeight(); 

У меня есть более простой способ узнать реальную высоту линии перед тем, как ее нарисовать, я не знаю, поможет ли это вам, ребята, но мое решение получить высоту линии не зависит от высоты макета, просто возьмите метрики шрифта следующим образом:

 myTextView.getPaint().getFontMetrics().bottom - myTextView.getPaint().getFontMetrics().top) 

с этим мы получим реальную высоту, которую шрифты возьмут из текстового изображения, которое будет расписано. Это не дает вам int, но вы можете сделать Math.round, чтобы получить почти значение.

  • getView возвращает null, когда fragment был создан из действия
  • CollapsingToolbarLayout субтитры
  • Android Smudged layout
  • Обработка экрана без потери данных - Android
  • Android Как настроить макет в полноэкранном режиме, когда видна клавиатура
  • Разница между гравитацией и layout_gravity на Android
  • Как программно выложить Views в RelativeLayout?
  • Библиотека поддержки Android v7: ошибка получения родителя для элемента
  • Закройте / спрячьте мягкую клавиатуру Android
  • Кнопка пользовательской формы Android
  • получить в данный момент fragment
  • Давайте будем гением компьютера.