Android - 如何判断特定视图何时呈现?

时间:2014-03-10 22:06:40

标签: android android-view android-lifecycle

我有一个常规按钮,我想显示一个计时器。因此,想象按钮的文本每秒都会改变为倒数计时器。但是,我需要这个计时器才能在按钮完全渲染并准备好进入屏幕时启动。

现在我正在片段AsyncTask中启动计时器(onCreateView())。这不是那么准确,因为我做了一些我必须拥有的其他装载东西。我可能会在onCreateView()的底部移动计时器开始,但即使这样也不是很准确。

我看到有一个OnGlobalLayoutListener树观察者。但是,当整个视图树“即将被绘制”时,我想象这一点?我如何准确知道我的特定按钮何时呈现并对用户可见?

2 个答案:

答案 0 :(得分:2)

OnGlobalLayoutListener()是正确的去处。它确保在你的按钮被布局时被调用("完全渲染并准备好进入屏幕" )。例如,在onCreate()中你可以这样做:

btn = (Button) findViewById(R.id.bn);   
btn.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

    @Override
    public void onGlobalLayout() {
        new AsyncTaskTimer.execute();
        // prevent the listener to be called more than once
        btn.getViewTreeObserver().removeOnGlobalLayoutListener(this);
    }
});

答案 1 :(得分:0)

您可以创建自定义按钮,然后实现onFinishInflate(),或者在初始化自定义按钮时,将其可见性设置为不可见并实现onWindowVisibilityChanged(int)。然后,当您将按钮设置为可见时,您将启动计时器。你也可以把它作为一个开始按钮,当按下它时启动计时器并改变作为计时器按钮所需的行为。

http://developer.android.com/reference/android/view/View.html