Android - 获取计时器小部件的时间 [英] Android - Get time of chronometer widget

查看:14
本文介绍了Android - 获取计时器小部件的时间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何从天文台获取时间?我尝试了 getText、getFormat、getBase 等,但它们都不起作用.

How to get the time from a Chronometer? I tried getText, getFormat, getBase, etc, but none of them could work.

示例代码片段:

Chronometer t = (Chronometer)findViewById(R.id.toptime);
long time = SystemClock.elapsedRealtime()-t.getBase();
Log.d(null,"Was: "+time); //time is not the proper time for some reason - it is a random number between 0 and 50
t.setBase(SystemClock.elapsedRealtime());
t.start();

推荐答案

如果您查看 Chronometer 类的源代码,您会发现它不会将经过的时间存储在字段中,而是每隔一段时间在内部进行计算是时候更新显示了.

If you look at the source of the Chronometer class, you'll see that it doesn't store the elapsed time in a field and it calculates it internally every time it needs to update the display.

但是,在您自己的代码中执行相同操作相对容易:

However it's relatively easy to do the same in your own code:

long elapsedMillis = SystemClock.elapsedRealtime() - chronometerInstance.getBase();

这假设你已经开始你的时钟是这样的:

This assumes that you have started your clock something like this:

chronometerInstance.setBase(SystemClock.elapsedRealtime());
chronometerInstance.start();

这是一个完整的例子:

public class ChronoExample extends Activity {
Chronometer mChronometer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    LinearLayout layout = new LinearLayout(this);
    layout.setOrientation(LinearLayout.VERTICAL);

    mChronometer = new Chronometer(this);
    layout.addView(mChronometer);

    Button startButton = new Button(this);
    startButton.setText("Start");
    startButton.setOnClickListener(mStartListener);
    layout.addView(startButton);

    Button stopButton = new Button(this);
    stopButton.setText("Stop");
    stopButton.setOnClickListener(mStopListener);
    layout.addView(stopButton);

    Button resetButton = new Button(this);
    resetButton.setText("Reset");
    resetButton.setOnClickListener(mResetListener);
    layout.addView(resetButton);        

    setContentView(layout);
}

private void showElapsedTime() {
    long elapsedMillis = SystemClock.elapsedRealtime() - mChronometer.getBase();            
    Toast.makeText(ChronoExample.this, "Elapsed milliseconds: " + elapsedMillis, 
            Toast.LENGTH_SHORT).show();
}

View.OnClickListener mStartListener = new OnClickListener() {
    public void onClick(View v) {
        mChronometer.start();
        showElapsedTime();
    }
};

View.OnClickListener mStopListener = new OnClickListener() {
    public void onClick(View v) {
        mChronometer.stop();
        showElapsedTime();
    }
};

View.OnClickListener mResetListener = new OnClickListener() {
    public void onClick(View v) {
        mChronometer.setBase(SystemClock.elapsedRealtime());
        showElapsedTime();
    }
};
}

关于 Chronometer 的一个有点令人困惑的事情是,您不能真正将其用作启动、停止和重新启动的秒表.当它运行时,它将始终显示自您上次重置以来经过的时间,无论您在此期间停止了多少次和多长时间.当它停止时,它只是停止更新显示.

One somewhat confusing thing about Chronometer is that you can't really use it as a stopwatch that gets started, stopped and restarted again. When it's running, it will always show the time elapsed since you last reset it, no matter how many times and for how long you have stopped it in the meantime. When it is stopped, it simply stops updating the display.

如果您需要诸如秒表之类的东西,您必须将 Chronometer 子类化,或者使用 .

If you need something like a stopwatch you'll have to subclass Chronometer or maybe create your own version using the source.

这篇关于Android - 获取计时器小部件的时间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆