2012-01-11 51 views
-1

在我的应用程序中,我有ViewFlipper中的选项卡。 当活动开始时,我初始化所有选项卡及其内部的视图。Android的ViewFlipper初始化视图

但问题出在第3个选项卡上。在此选项卡的初始化过程中,我想知道TextView与父母左侧的距离。为此我称之为TextView.getLeft()。

但是,当这个标签没有显示,我收到这个方法的'0'。因此,我无法正确初始化视图。

现在变得奇怪: 当我开始活动,第一个选项卡,然后去第三,启动的getLeft返回0,并在选项卡中单击.... 但是当我开始活动到第三getLeft返回一个有效值....

那么,我怎样才能得到正确的值? 我猜这个ViewFlipper在选项卡没有显示时没有正确的X,Y坐标视图。

Ps。这很难解释。如果我需要澄清一些事情,请告诉我。

+0

其中是TextView.getLeft()。叫什么名字?在onCreate? – blessenm 2012-01-11 09:17:42

+0

超时后:onCreate->启动画面 - >超时 - > setContentView(viewflipper) - > findViewById - > getLeft() – 2012-01-11 09:20:18

回答

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) {} 
}); 

我真的不喜欢这个sollution。但它的工作。

0

试试这个在上创建

ViewTreeObserver vto = textview.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     textview.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
     Log.e("Width",Integer.toString(textview.getWidth())); 

    } 
}); 

的onCreate被称为绘制的UI之前,所以宽度应为0的措施或图纸还没有发生。

+0

谢谢,我试过这个只在活动开始时调用。当标签翻转时不是。我仍然收到0. – 2012-01-11 12:33:26

+0

删除此行textview.getViewTreeObserver()。removeGlobalOnLayoutListener(this);.或者可能需要尝试一些TabChangedListener。 – blessenm 2012-01-11 12:42:02