更改文本大小后立即获取TextView Top / Y.

时间:2017-10-05 20:58:46

标签: android textview rect

我正在尝试根据其Y值和另一个Views Y值的差异来翻译TextView。在我翻译TextView之前,我改变了它的文本大小,有效地改变了它的Y值。出现的问题是TextViews Y值在文本大小发生变化后不会立即更新

E.G。以下两个日志语句都会产生相同的结果

Log.i(TAG, String.valueOf(productTotal.getY()));
productTotal.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
Log.i(TAG, String.valueOf(productTotal.getY()));

但是,如果我再次运行此代码,我将收到更新的Y值。我的猜测是因为按下按钮时会调用下面的逻辑,所以在下一次帧更新之前可能会缓存TextViews Y值?无论如何,getTop,getY,getHeight都给了我不正确的价值。在更改TextViews文本大小后,您有什么建议立即获取更新的Y值?谢谢。

1 个答案:

答案 0 :(得分:0)

如果您需要立即找到getY()的值,则必须预测视图进行布局处理时会发生的一些工作。这主要涉及拨打View#measure(),如下所示:

TextView productTotal = (TextView) findViewById(R.id.textView1);
int textSize = 100;

Log.i(TAG, String.valueOf(productTotal.getY()));
productTotal.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
Log.i(TAG, String.valueOf(productTotal.getY()));
ViewGroup parent = ((ViewGroup) productTotal.getParent());
int widthMeasureSpec =
    View.MeasureSpec.makeMeasureSpec(parent.getWidth(), View.MeasureSpec.UNSPECIFIED);
int heightMeasureSpec =
    View.MeasureSpec.makeMeasureSpec(parent.getHeight(), View.MeasureSpec.UNSPECIFIED);
productTotal.measure(widthMeasureSpec, heightMeasureSpec);
Log.i(TAG, String.valueOf(productTotal.getY()));
// No getMeasuredY(), so we have to back into the new value for "Y".
Log.i(TAG, String.valueOf(productTotal.getBottom() - productTotal.getMeasuredHeight()));

请参阅doc for measure()

  调用

[measure]来查明视图应该有多大。父级在宽度和高度参数中提供约束信息。