Tôi muốn một bộ đếm thời gian mm: ss đơn giản được hiển thị trên thanh tác vụ của tôi, có thể chọn số phút để bắt đầu đếm ngược và sau đó gọi phương thức khi nó ở mức 0. Có thể làm như thế không? Cảm ơn bạnCó thể thêm bộ hẹn giờ vào thanh tác vụ trên Android không?
Trả lời
Tôi đã quản lý để làm điều đó bằng cách thêm TextView
vào Thanh tác vụ dưới dạng Action View trong menu, sau đó cập nhật nó theo khoảng thời gian đều đặn bằng cách sử dụng CountDownTimer
.
(Được thử nghiệm trên trình giả lập Android 3.0, trình giả lập Android 4.3 và thiết bị thực chạy Android 4.3).
Đây là XML cho mục menu. Lưu ý rằng actionViewClass="android.widget.TextVew"
(showAsAction và actionViewClass không có vùng tên android vì tôi đang sử dụng thanh tác vụ hỗ trợ).
<?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>
Trong onCreateOptionsMenu
, tôi tìm ra MenuItem
và gọi getActionView
để gán nó vào tin TextView
, timerText
. Tôi cũng áp dụng một số đệm ở đây, để nó không phải ở cạnh của màn hình.
@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;
}
Tôi có một phương pháp gọi là startTimer
để bắt đầu một CountDownTimer
và cập nhật timerText
trong onTick
của nó. Tôi gọi startTimer
từ onCreateOptionsMenu
để đảm bảo rằng timerText
không được truy cập trước khi nó được khởi tạo. (Trước đây, tôi gọi là startTimer
từ onCreate
, nhưng có số 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();
}
Tôi chắc chắn rằng bất cứ ai đọc bài viết này sẽ biết một cách tốt hơn để chuyển đổi một số nguyên giây để một timecode như "00:00:00", nhưng chỉ trong trường hợp tôi sẽ chia sẻ những secondsToString
phương pháp tôi đã sử dụng trong onTick
, ở trên.
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;
}
Cảm ơn bạn Matt! Nó hoạt động hoàn hảo! – madx
NullPointerException tại timerText.setText(); –
menu xml
<item
android:id="@+id/counter"
android:title=""
android:showAsAction="always">
</item>
public boolean ** onCreateOptionsMenu (Menu 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;
}
câu trả lời đúng ... –
Có nó có thể để thêm hẹn giờ trong hành động toolbar sử dụng mã này trong 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();
}
và cũng sử dụng menu file định nghĩa timer id chỉ như thế này
nếu tìm hiểu thêm chuyến thăm youtube :)
- 1. Android - Kiểm soát tác vụ với Bộ hẹn giờ và Bộ hẹn giờ?
- 2. Thêm thanh tác vụ vào ListActivity
- 3. select() - bộ hẹn giờ có thể
- 4. Không thể Thêm chế độ xem tùy chỉnh vào thanh tác vụ Android, tại sao?
- 5. Dịch vụ Windows với bộ hẹn giờ
- 6. Thêm bộ hẹn giờ vào ứng dụng Windows Forms
- 7. Cách thêm mục thả xuống trên thanh tác vụ
- 8. Android: Các tab Swipey không có Thanh tác vụ
- 9. Tab Thanh tác vụ Android
- 10. Android Nút và thanh tác vụ Android
- 11. Bộ hẹn giờ và javafx
- 12. cách thêm nút văn bản vào thanh tác vụ
- 13. Hẹn giờ không dừng trong Android
- 14. Thay đổi chiều cao thanh tác vụ trên Android JellyBean
- 15. Thêm 'Thêm Nút' vào thanh tác vụ ở trên cùng khi bạn đã có các tab và menu
- 16. Bộ hẹn giờ trong clojure?
- 17. robotium - nhấp vào tab thanh tác vụ
- 18. Đặt công tắc bên trong thanh tác vụ trên Android
- 19. mục menu trên thanh tác vụ onclick?
- 20. Android 4.0/ICS - Biểu tượng ứng dụng trên thanh tác vụ không thể bấm
- 21. khả năng hiển thị bộ android của một nút trên bộ hẹn giờ
- 22. Android: Thanh tác vụ Sherlock thả xuống
- 23. Thanh tác vụ Android tùy chỉnh
- 24. Đồng bộ hóa bộ hẹn giờ để ngăn chồng chéo
- 25. Tạo Bộ hẹn giờ iOS
- 26. Đang đợi Bộ hẹn giờ kết thúc bằng Java
- 27. Bộ hẹn giờ trong Windows
- 28. Thanh tác vụ Android như mẫu twitter
- 29. Bộ hẹn giờ nhanh, đa nền tảng?
- 30. Thanh tác vụ Android tùy chỉnh chế độ xem thả xuống trên mục nhấp vào
Bạn đã thử cho đến nay? – Yup
Đây là một ví dụ http://thegeekyland.blogspot.com/2014/07/android-count-down-timer-in-actionbar.html – Arlind