Android ViewFlipper初始化视图

时间:2012-01-11 07:51:44

标签: android tabs viewflipper

在我的应用程序中,我在ViewFlipper中有了标签。 活动开始后,我会初始化所有选项卡及其中的视图。

但问题出在第3个标签上。在这个选项卡的初始化,我想知道TextView与它父母左侧的距离。因此我调用TextView.getLeft()。

但是当没有显示此选项卡时,我从此方法收到'0'。因此我无法正确初始化视图。

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

那么,我怎样才能获得正确的价值? 我猜想当没有显示标签时,ViewFlipper没有正确的视图X,Y坐标。

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

2 个答案:

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

我真的不喜欢这种溶解。但它确实有效。