シンプルなmm:ss
タイマーをアクションバーに表示し、カウントダウンを開始する分数を選択して、0 になったらメソッドを呼び出すことができるようにしたいと思います。これは可能ですか?
3 に答える
メニューのアクション ビューTextView
としてアクション バーに を追加し、 .
(Android 3.0 エミュレーター、Android 4.3 エミュレーター、および Android 4.3 を実行する実際のデバイスでテスト済み)。CountDownTimer
メニュー項目の XML は次のとおりです。(サポート アクション バーを使用しているため、 showAsActionactionViewClass="android.widget.TextVew"
と actionViewClass には android 名前空間がありません)。
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:compatibility="http://schemas.android.com/apk/res-auto" >
<item android:id="@+id/break_timer"
android:title="@string/break_timer_title"
compatibility:showAsAction="always"
compatibility:actionViewClass="android.widget.TextView" />
</menu>
で、それを privateに割り当てるためのand 呼び出しonCreateOptionsMenu
を見つけました。画面の端にならないように、ここにもパディングを適用します。MenuItem
getActionView
TextView
timerText
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.break_timer, menu);
MenuItem timerItem = menu.findItem(R.id.break_timer);
timerText = (TextView) MenuItemCompat.getActionView(timerItem);
timerText.setPadding(10, 0, 10, 0); //Or something like that...
startTimer(30000, 1000); //One tick every second for 30 seconds
return true;
}
startTimer
を開始し、そのCountDownTimer
を更新するために呼び出されるメソッドがあります。から呼び出して、初期化される前にアクセスされないようにします。(以前、 から電話しましたが、 を受け取りました)。timerText
onTick
startTimer
onCreateOptionsMenu
timerText
startTimer
onCreate
NullPointerException
private void startTimer(long duration, long interval) {
CountDownTimer timer = new CountDownTimer(duration, interval) {
@Override
public void onFinish() {
//TODO Whatever's meant to happen when it finishes
}
@Override
public void onTick(long millisecondsLeft) {
int secondsLeft = (int) Math.round((millisecondsLeft / (double) 1000));
timerText.setText(secondsToString(secondsLeft));
}
};
timer.start();
}
これを読んでいる人なら誰でも、整数の秒数を「00:00:00」などのタイムコードに変換するより良い方法を知っていると確信していますが、念のため、上記のsecondsToString
で使用した方法を共有しますonTick
。
private String secondsToString(int improperSeconds) {
//Seconds must be fewer than are in a day
Time secConverter = new Time();
secConverter.hour = 0;
secConverter.minute = 0;
secConverter.second = 0;
secConverter.second = improperSeconds;
secConverter.normalize(true);
String hours = String.valueOf(secConverter.hour);
String minutes = String.valueOf(secConverter.minute);
String seconds = String.valueOf(secConverter.second);
if (seconds.length() < 2) {
seconds = "0" + seconds;
}
if (minutes.length() < 2) {
minutes = "0" + minutes;
}
if (hours.length() < 2) {
hours = "0" + hours;
}
String timeString = hours + ":" + minutes + ":" + seconds;
return timeString;
}