Chciałbym, aby na pasku akcji pojawił się prosty timer mm: ss, móc wybrać liczbę minut do rozpoczęcia odliczania, a następnie wywołać metodę, gdy jest ona równa 0. Czy to możliwe i jak? DziękujemyCzy jest możliwe dodanie timera do paska akcji na Androidzie?
Odpowiedz
Udało mi się to zrobić, dodając TextView
do paska akcji jako Action View w menu, a następnie aktualizując go w regularnych odstępach czasu, używając CountDownTimer
.
(Testowany na emulatorze Androida 3.0, emulatorze Androida 4.3 i prawdziwym urządzeniu z systemem Android 4.3).
Oto XML dla pozycji menu. Zauważ, że actionViewClass="android.widget.TextVew"
(showAsAction i actionViewClass nie mają androidowej przestrzeni nazw, ponieważ używam paska akcji wsparcia).
<?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>
W onCreateOptionsMenu
uważam, że MenuItem
i nazywają getActionView
aby przypisać go do prywatnej TextView
, timerText
. Stosuję tu również wyściółkę, aby nie znajdowała się dokładnie na krawędzi ekranu.
@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;
}
Mam metoda zwana startTimer
rozpocząć CountDownTimer
i aktualizować timerText
w onTick
. Dzwonię pod numer startTimer
z onCreateOptionsMenu
, aby uniemożliwić dostęp do timerText
przed zainicjowaniem. (Wcześniej nazwałem startTimer
z onCreate
, ale otrzymałem numer 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();
}
Jestem pewien, że ktoś czyta to będzie wiedział, lepszy sposób na konwersję całkowitą liczbę sekund do kodów czasowych takich jak „00:00:00”, ale na wszelki wypadek będę dzielić secondsToString
metoda używana w onTick
powyżej.
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;
}
Dziękuję Matt! Działa doskonale! – madx
NullPointerException at timerText.setText(); –
Menu xml
<item
android:id="@+id/counter"
android:title=""
android:showAsAction="always">
</item>
** public boolean onCreateOptionsMenu (MENU)”
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;
}
poprawna odpowiedź ... –
Tak jest to możliwe, aby dodać licznik w działaniu paska narzędzi użyć tego kodu w Javie :
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();
}
a także skorzystać plik menu zdefiniowane id zegar tak jak ten
jeśli dowiedzieć się więcej na YouTube wizyta :)
- 1. Czy jest możliwe dodanie pliku formularza do panelu asp.net?
- 2. Czy jest możliwe dodanie niestandardowego koloru hover do podnoszonych przycisków?
- 3. Czy jest możliwe dodanie do dostępnych parametrów żądania (HttpServletRequest)?
- 4. SQL: Czy jest możliwe dodanie kolumny dummy do instrukcji select?
- 5. Czy możliwe jest utworzenie stałego paska ocen?
- 6. Czy opóźnienie OSC/Midi (brak dźwięku) jest możliwe na Androidzie?
- 7. Czy jest możliwe utworzenie mapy HashMap na Androidzie?
- 8. Czy jest możliwe dodanie "statycznej" funkcji rozszerzenia dla klasy Java?
- 9. Windows 10: czy możliwe jest ręczne dodanie nowego powiadomienia do centrum działań?
- 10. Z rozszerzeniami reaktywnymi (RX), czy możliwe jest dodanie polecenia "Przerwa"?
- 11. Czy jest możliwe dodanie ikony w kartach nawigacyjnych bootstrap?
- 12. Możliwe jest dodanie arkusza stylów XSLT do zserializowanego dokumentu XML?
- 13. robota - kliknięcie na zakładki paska akcji
- 14. Zmiana ikony paska akcji
- 15. Zmiana wysokości paska czynności na Androidzie JellyBean
- 16. Czy można mieć ikony na kartach paska akcji dla Androida?
- 17. Jak dodać element SearchWidget do paska akcji?
- 18. Zmiana koloru ikon paska przycisków paska akcji
- 19. Czy przewijanie paska kart w iPhonie jest możliwe?
- 20. Jaki jest najlepszy sposób na wdrożenie "timera"?
- 21. Czy lewostronne dopasowanie przycisku paska nawigacyjnego Twitter Bootstrap jest możliwe?
- 22. Jak dodać spinner do paska akcji?
- 23. Czy możliwe jest automatyczne ukrycie paska bocznego Eclipse?
- 24. Ustal, czy pasek akcji jest podzielony
- 25. Czy jest możliwe dołączenie php do html na IIS7?
- 26. Dodawanie paska akcji w ListActivity
- 27. ShareActionProvider bez paska działań w Androidzie
- 28. Jak zadeklarować rozszerzenie paska narzędzi/paska czynności na Androidzie Lollipop?
- 29. HTML układ: dodanie paska bocznego kolumny do istniejącej witryny
- 30. Czy jest możliwe w Ghostscript dodanie znaku wodnego do każdej strony w formacie PDF
próbowałeś do tej pory? – Yup
Oto przykład http://thegeekyland.blogspot.com/2014/07/android-count-down-timer-in-actionbar.html – Arlind