Android的 - 获得天文钟构件的时间 [英] Android - Get time of chronometer widget

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

问题描述

我有一个天文台小部件在我的Andr​​oid应用程序。我想知道如何从它那里得到的时间。我试过的getText,的getFormat,getBase等,但它们都没有工作。这可能是一个简单的问题,但我无法找到它的谷歌。
谢谢,艾萨克·沃勒

例如code片断:

 天文台表T =(天文台)findViewById(R.id.toptime);
很长一段时间= SystemClock.elapsedRealtime() -  t.getBase();
Log.d(NULL,是:+时间); //时间不是适当的时候由于某种原因 - 它是一个介于0和50的随机数
t.se​​tBase(SystemClock.elapsedRealtime());
t.start();
 

解决方案

如果你看一下天文台类的源代码,你会发现,它并没有经过时间存储在一个领域,并计算其内部的每时间,它需要更新显示。

不过它比较容易在自己的code做相同的:

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

这假定您已经启动了您的时钟是这样的:

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

下面是一个完整的例子:

 公共类ChronoExample延伸活动{
天文台mChronometer;

@覆盖
保护无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);

    的LinearLayout布局=新的LinearLayout(本);
    layout.setOrientation(LinearLayout.VERTICAL);

    mChronometer =新的天文台表(本);
    layout.addView(mChronometer);

    按钮startButton =新的按钮(这一点);
    startButton.setText(开始);
    startButton.setOnClickListener(mStartListener);
    layout.addView(startButton);

    按钮STOPBUTTON =新的按钮(这一点);
    stopButton.setText(停止);
    stopButton.setOnClickListener(mStopListener);
    layout.addView(STOPBUTTON);

    按钮resetButton =新的按钮(这一点);
    resetButton.setText(复位);
    resetButton.setOnClickListener(mResetListener);
    layout.addView(resetButton);

    的setContentView(布局);
}

私人无效showElapsedTime(){
    长ela​​psedMillis = SystemClock.elapsedRealtime() -  mChronometer.getBase();
    Toast.makeText(ChronoExample.this,经过的毫秒:+ elapsedMillis,
            Toast.LENGTH_SHORT).show();
}

View.OnClickListener mStartListener =新OnClickListener(){
    公共无效的onClick(视图v){
        mChronometer.start();
        showElapsedTime();
    }
};

View.OnClickListener mStopListener =新OnClickListener(){
    公共无效的onClick(视图v){
        mChronometer.stop();
        showElapsedTime();
    }
};

View.OnClickListener mResetListener =新OnClickListener(){
    公共无效的onClick(视图v){
        mChronometer.setBase(SystemClock.elapsedRealtime());
        showElapsedTime();
    }
};
}
 

一约天文台有点令人困惑的事情是,你不能真正把它作为被启动的,停止和重新启动再次秒表。当程序运行时,它总是会显示消耗的时间,因为你有多少次,多长时间您在此期间的停止了它最后的复位,不管。当它停止时,它简单地停止更新显示。

如果你需要的东西就像一个秒表你必须继承天文台表或者使用创建自己的版本的<一个href="http://www.google.com/$c$csearch/p?hl=en#uX1GffpyOZk/core/java/android/widget/Chronometer.java&q=android%20chronometer">source.

I have a Chronometer widget in my Android app. I was wondering how to get the time from it. I tried getText, getFormat, getBase, etc, but none of them work. This is probably a easy question, but I could not find it on Google.
Thanks, Isaac Waller

Example code snippet:

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();

解决方案

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();

Here's a full example:

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

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.

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天全站免登陆