在我的应用程序中,我在ViewFlipper中有了标签。 活动开始后,我会初始化所有选项卡及其中的视图。
但问题出在第3个标签上。在这个选项卡的初始化,我想知道TextView与它父母左侧的距离。因此我调用TextView.getLeft()。
但是当没有显示此选项卡时,我从此方法收到'0'。因此我无法正确初始化视图。
现在变得奇怪了: 当我将活动开始到第一个选项卡,然后转到第三个,getLeft返回0启动并在选项卡上单击.... 但是,当我将活动启动到第三个选项卡时,getLeft返回一个有效值....
那么,我怎样才能获得正确的价值? 我猜想当没有显示标签时,ViewFlipper没有正确的视图X,Y坐标。
聚苯乙烯。这很难解释。如果我需要澄清一些事情,请告诉我。
答案 0 :(得分:0)
在创建
时尝试此操作ViewTreeObserver vto = textview.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
textview.getViewTreeObserver().removeGlobalOnLayoutListener(this);
Log.e("Width",Integer.toString(textview.getWidth()));
}
});
在绘制ui之前调用onCreate,因此宽度应为0,因为度量或绘图尚未发生。
答案 1 :(得分:0)
我注意到之前调用了getLeft!标签实际上已被执行。 (调用是在setDisplayedChild())
之后因此我需要知道视图何时实际显示。 我在InAnimation上添加了一个AnimationListener:
ViewFlipper.getInAnimation().setAnimationListener(new AnimationListener() {
public void onAnimationStart(Animation animation) {
TextView.getLeft();
}
public void onAnimationRepeat(Animation animation) {}
public void onAnimationEnd(Animation animation) {}
});
我真的不喜欢这种溶解。但它确实有效。