安卓倒数计时器的小时/分钟选择器

Dan*_*ach 10 user-interface android timer picker countdown

我正在尝试实现像倒计时器那样在0发出警报的东西.我希望能够设置在计时器关闭之前等待的时间,我想知道是否有提供的UI小部件或元素这种选择功能.

基本上,android有没有类似iPhone的选择旋转轮?或者是否有某种类型的时间戳可以选择任意数小时和分钟?android中的timepicker小部件有一个不必要的AM/PM标签.

我是否需要实现自己的自定义UI才能实现此目的?

小智 10

您可以使用默认的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;
    }
}
Run Code Online (Sandbox Code Playgroud)


Nei*_*eil 1

是的,你可以一起破解一个。尽管由于 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);
Run Code Online (Sandbox Code Playgroud)

然后在布局中添加其中几个:

<com.android.internal.widget.NumberPicker
android:id="@+id/picker1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"  />
Run Code Online (Sandbox Code Playgroud)

setCurrent 设置选择器的索引,在 foo 的情况下意味着值“$07”。setRange 设置要在选择器中显示的值。

祝你好运。