我正在尝试根据其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值?谢谢。
答案 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()));
调用[measure]来查明视图应该有多大。父级在宽度和高度参数中提供约束信息。