我想要一個簡單的mm:ss計時器顯示在我的操作欄上,能夠選擇分鐘數以開始倒計時,然後在方法爲0時調用方法。這是可能的以及如何?謝謝是否有可能向android上的操作欄添加一個計時器?
回答
我已經設法做到這一點,在操作欄中添加TextView
作爲Action View在菜單中,然後使用CountDownTimer
定期更新它。
(在Android 3.0模擬器,Android 4.3模擬器和運行Android 4.3的真實設備上測試)。
下面是菜單項的XML。請注意,actionViewClass="android.widget.TextVew"
(showAsAction和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>
在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
方法在其onTick
開始CountDownTimer
和更新timerText
。我從onCreateOptionsMenu
呼叫startTimer
以確保timerText
在它被初始化之前不被訪問。 (之前,我從onCreate
調用startTimer
,但得到了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;
}
謝謝你馬特!它完美的工作! – madx
NullPointerException at timerText.setText(); –
菜單XML
<item
android:id="@+id/counter"
android:title=""
android:showAsAction="always">
</item>
**公共布爾onCreateOptionsMenu(菜單菜單)」
long timer = 10000;
public Boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.menu, menu);
final MenuItem counter = menu.findItem(R.id.counter);
new CountDownTimer(timer, 1000) {
public void onTick(long millisUntilFinished) {
long millis = millisUntilFinished;
String hms = (TimeUnit.MILLISECONDS.toHours(millis))+":"+(TimeUnit.MILLISECONDS.toMinutes(millis) -TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)))+":"+ (TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
counter.setTitle(hms);
timer = millis;
}
public void onFinish() {
counter.setTitle("done!");
}
}.start();
return true;
}
正確答案... –
是的,它可以添加計時器在工具欄操作 使用該代碼的Java :
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();
}
,還可以使用 菜單文件中定義計時器ID就這樣
如果瞭解更多訪問YouTube的:)
- 1. 是否有可能只有一個片段的操作欄?
- 2. android:是否有可能在操作欄上保留一個標題在微調器上方
- 3. 是否有可能在android的tableRow中添加一個webview?
- 4. 是否有可能重複一個臨時計時器?
- 5. 是否可以添加一個計時器到按鈕?
- 6. 你可以添加一個文本視圖到一個操作欄嗎?如果沒有,一個子操作欄?
- 7. 是否有可能使用appcompat庫有一個操作欄菜單?
- 8. 是否有可能從一個類重定向到一個操作方法
- 9. 在操作欄上添加了額外的微調器android
- 10. 添加一條細線上的操作欄的Android
- 11. 是否有可能在一個操作欄上顯示一個圖標和一個微調框
- 12. 的Android向上導航和操作欄
- 13. 在Android上的自定義操作欄上的一切都有可能嗎?
- 14. 如何在android中的操作欄上添加多個圖標?
- 15. 是否有可能在編譯時向AndroidManifest.xml添加標籤?
- 16. 添加操作欄
- 17. android將背景添加到操作欄
- 18. Salesforce:在對象上創建計時器 - 是否有可能?
- 19. Android工作室 - 是否可以添加標籤指向設計師的片段?
- 20. 有沒有可能有一個透明的操作欄沒有覆蓋視圖與操作欄?
- 21. 是否有可能創建一個Android上的Parcelable的HashMap?
- 22. Qt的:是否有可能一個QVBoxLayout添加到QTableView中
- 23. 向操作欄添加配置選項 - Android 4.0+
- 24. 如何向操作添加/更改Android Studio工具欄圖標?
- 25. 添加一個動作欄到Theme.Black.NoTitleBar Android
- 26. Android操作欄,「上」的項目,與具有多於一個親
- 27. 是否有可能對h:commandLink的action屬性有多個操作?
- 28. 是否有可能向MVC中的RouteCollection添加路由?
- 29. 是否有可能向parse.com後端添加額外的邏輯?
- 30. 是否有可能在android中添加應用程序圖標狀態欄?
你試過這麼遠嗎? – Yup
這裏是一個例子http://thegeekyland.blogspot.com/2014/07/android-count-down-timer-in-actionbar.html – Arlind