更改文本大小后立即获取TextView顶部/ Y
问题描述:
我正在尝试根据其Y值和另一个视图Y值的差异来翻译TextView。在翻译TextView之前,我改变它的文本大小,有效地改变它的Y值。发生的问题是TextView的Y值在文本大小改变后没有立即更新。更改文本大小后立即获取TextView顶部/ 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值?谢谢。
答
如果您需要立即找到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()));
[度量]被调用以找出视图应该有多大。父级在宽度和高度参数中提供约束信息。
我发现了一个简单得多的解决方案,我只是预期了Y值后文本大小的变化。然而,我仍然有兴趣了解为什么这是一个问题。 android框架缓存视图的边界值直到下一个布局传递? – whompum