我有一个常规按钮,我想显示一个计时器。因此,想象按钮的文本每秒都会改变为倒数计时器。但是,我需要这个计时器才能在按钮完全渲染并准备好进入屏幕时启动。
现在我正在片段AsyncTask
中启动计时器(onCreateView()
)。这不是那么准确,因为我做了一些我必须拥有的其他装载东西。我可能会在onCreateView()
的底部移动计时器开始,但即使这样也不是很准确。
我看到有一个OnGlobalLayoutListener
树观察者。但是,当整个视图树“即将被绘制”时,我想象这一点?我如何准确知道我的特定按钮何时呈现并对用户可见?
答案 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