2017-10-05 61 views
0

我正在尝试根据其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值?谢谢。

回答

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()

[度量]被调用以找出视图应该有多大。父级在宽度和高度参数中提供约束信息。

+0

我发现了一个简单得多的解决方案,我只是预期了Y值后文本大小的变化。然而,我仍然有兴趣了解为什么这是一个问题。 android框架缓存视图的边界值直到下一个布局传递? – whompum