Выбор часа / минуты для таймера обратного отсчета - PullRequest
9 голосов
/ 16 сентября 2010

Я пытаюсь реализовать что-то вроде таймера обратного отсчета, который воспроизводит сигнал тревоги на 0. Я хочу иметь возможность установить количество времени ожидания, прежде чем таймер сработает, и мне интересно, есть ли виджет пользовательского интерфейса или элемент, обеспечивающий этот вид функциональности выбора.

В принципе, у андроида есть что-то вроде вращающегося колеса выбора iPhone? Или есть какой-то тип таймера, который позволяет выбирать произвольное количество часов и минут? Виджет выбора времени в Android имеет ненужную метку AM / PM.

Нужно ли реализовывать свой собственный пользовательский интерфейс для достижения этой цели?

Ответы [ 2 ]

10 голосов
/ 02 ноября 2010

Вы можете использовать TimePickerDialog по умолчанию и переопределить метод onTimeChanged, чтобы самостоятельно обновить заголовок:

public class DurationPickerDialog extends TimePickerDialog {

    public DurationPickerDialog(Context context, int theme,
        OnTimeSetListener callBack, int hour, int minute) {
        super(context, theme, callBack, hour, minute, true);
        updateTitle(hour, minute);
    }

    public DurationPickerDialog(Context context, OnTimeSetListener callBack,
        int hour, int minute) {
        super(context, callBack, hour, minute, true);
        updateTitle(hour, minute);
    }

    @Override
    public void onTimeChanged(TimePicker view, int hour, int minute) {
        super.onTimeChanged(view, hour, minute);
        updateTitle(hour, minute);
    }

    public void updateTitle(int hour, int minute) {
        setTitle("Duration: " + hour + ":" + formatNumber(minute));
    }

    private String formatNumber(int number) {
        String result = "";
        if (number < 10) {
            result += "0";
        }
        result += number;

        return result;
    }
}
1 голос
/ 16 сентября 2010

Да, вы можете взломать один вместе.Вполне возможно, что этот код будет иметь короткий срок службы, хотя из-за изменений в API.

int foo = 7;
Object o = findViewById(ids[i]);
Class<? extends Object> c = o.getClass();
Method m = c.getMethod("setCurrent", int.class);
m.invoke(o, foo);

String[] displayedValues = new String[] { "$00", "$01", "$02", "$03", "$04", 
                        "$05", "$06", "$07", "$08", "$09", "$10", "$11", 
                        "$12", "$13", "$14", "$15", "$16", "$17", "$18", "$19", "$20", "$21", 
                        "$22", "$23", "$24", "$25"};
Method m = c.getMethod("setRange", int.class, int.class, String[].class);
M.invoke(o, 0, 25, displayedValues);

И затем поместите пару из них в свой макет:

<com.android.internal.widget.NumberPicker
android:id="@+id/picker1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"  />

setCurrentset это индекс средства выбора, который в случае foo означает значение «$ 07».setRange устанавливает значения, отображаемые в средстве выбора.

Удачи.

...