【问题标题】:Get available width for TextView with layout_width="wrap_content"使用 layout_width="wrap_content" 获取 TextView 的可用宽度
【发布时间】:2018-02-02 04:11:05
【问题描述】:

我有一个复杂的布局,其中包含带有 layout_width="wrap_content" 的 TextView。我想得到这个 TextView 可以填充的最大宽度。

有通用的方法吗?或者我应该检查所有父母并计算他们的边距,填充等?安卓是怎么做到的?

【问题讨论】:

  • XY 问题?为什么需要最大可能的宽度? android:maxWidth 怎么样?
  • 我需要最大可能的宽度来手动计算是否适合一行文本并根据此更改此文本。我不使用 maxWidth。
  • 最好计算文本大小运行时并调整直到适合
  • 我想根据最大可用宽度更改文本值
  • 在TextView的onMeasure()中,宽度和高度的约束会通过MeasureSpecs从父级传下来。特别是,它们可以是 UNSPECIFIED、AT_MOST 或 EXACTLY。在最后两种情况下,您有最大宽度。首先,我认为你不能计算最大宽度,但你可以看看 TextView 的代码,看看它在这种情况下做了什么。

标签: java android textview width


【解决方案1】:

您可以像这样获取它的父级并计算它的宽度。这个宽度将是TextView 可以采用的最大宽度,前提是父级没有填充。

View parent = (View) textView.getParent();
int width = parent.getWidth();

如果父级有一些填充,您需要单独计算它并从该宽度中减去。

int paddingE = parent.getPaddingEnd();
int paddingS = parent.getPaddingStart();
int totalWidth = width - (paddingE + paddingS);

【讨论】:

  • layout_width="wrap_content"layout_width="match_parent" 的父母是否正确?我需要更通用的方式。
  • 你说的更通用的方式是什么意思?这为您提供textView 在其父级中可以接受的最大宽度,而与父级的宽度参数无关。
  • 好的,我试着解释一下。父 LinearLayout 有 layout_width="wrap_content",因此 parent.getWidth() 如果未渲染,则返回零,或者内部子级的宽度,但不是最大可用空间。
猜你喜欢
  • 2021-06-04
  • 2014-11-28
  • 2011-12-25
  • 1970-01-01
  • 2013-04-07
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多