【问题标题】:hour/minute picker for android countdown timerandroid倒数计时器的小时/分钟选择器
【发布时间】:2011-04-13 08:17:35
【问题描述】:

我正在尝试实现类似倒数计时器之类的功能,它会在 0 时发出警报。我希望能够设置在计时器响起之前等待的时间量,我想知道是否有 UI 小部件或提供这种选择功能的元素。

基本上,android 是否有类似 iPhone 的选择旋转轮的功能?或者是否有某种类型的时间选择器允许选择任意数量的小时和分钟? android 中的 timepicker 小部件有一个不必要的 AM/PM 标签。

我是否需要实现自己的自定义 UI 才能实现这一点?

【问题讨论】:

    标签: android user-interface timer picker countdown


    【解决方案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);
    

    然后在你的布局中放几个这样的:

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

    setCurrent set 是选择器的索引,在 foo 的情况下,它的值是“$07”。 setRange 设置要在选取器中显示的值。

    祝你好运。

    【讨论】:

    • pengwang,我希望编辑澄清一些事情。如果没有,请告诉我。
    【解决方案2】:

    您可以使用默认的 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;
        }
    }
    

    【讨论】:

    • 我用的是三星s3。单击设置按钮时间后,对话框关闭但不再显示,但如果我单击取消按钮对话框工作正常。
    • 据我所知,这不允许设置超过 24 小时的持续时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 2022-09-30
    • 2019-11-24
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    相关资源
    最近更新 更多