繁体   English   中英

Android日期/时间轮选择器

[英]Android date/time wheel picker

如何为时间选择器(以及日期选择器)实现此布局? 默认布局是(非常大)时钟或(非美)微调器时间选择器。 我在几个应用程序中看到了这一点,但无法找到如何实现这种外观和感觉。

在此输入图像描述

对于可能需要这个的任何人的未来参考,只需在android小部件中选择一个TimePicker然后在xml文件中输入android:timePickerMode="spinner"就可以实现这个时间选择器微调android:timePickerMode="spinner"

您的小部件xml代码应如下所示:

<TimePicker
    android:id="@+id/timePicker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:timePickerMode="spinner" />

我的回答是基于文档

这个例子有三个选择器:NumberPicker,DatePicker和TimerPicker。

https://github.com/rodrigobusata/android-pickers

要么

仅使用没有库的示例并覆盖Android默认选择器。

您应该注意,此对话框是一个片段。

也就是说,主要的想法是:当你需要启动这个日期选择器时,你会将该片段显示为当前活动的叠加。 此片段具有日期选择侦听器:用户选择日期时启动的事件。 好的,到此为止一切都很简单。 最难理解的是最后一个:片段和活动之间的交互。 做什么的? 因为活动需要知道选择了日期。 为实现此目的,Fragment将具有将由活动实现的公共接口。

好的,让我们看看代码:

MyActivity.java

public class MyActivity extends FragmentActivity implements DatePickerFragment.FragmentInteraction{

    @Override
    public void onCreate(Bundle savedInstanceState){
        Button showDatePickerButton = (Button)findViewById(R.id.dateButton);
        showDatePickerButtonsetOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                DialogFragment newFragment = new DatePickerFragment();
                newFragment.show(getSupportFragmentManager(), getString(R.string.datePickerTitle));
            }
        });
    }

    @Override
    public void doSomethingWithDate(int day, int month, int year) {
        Log.d("", "SELECTED DATE " + month + "/" + day  + "/" + year);
    }
}

DatePickerFragment.java

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener{

    private FragmentInteraction mListener;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        mListener = (FragmentInteraction) activity;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        //Show picker with actual date presetted
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        // Create a new instance of DatePickerDialog and return it
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    @Override
    public void onDateSet(DatePicker view, int anio, int mes, int dia) {
        mListener.doSomethingWithDate(dia, mes + 1, anio);
    }

    public interface FragmentInteraction{
        public void doSomethingWithDate(int dia, int mes, int anio);
    }
}

只需在xml中添加timepickermode就像这样<TimePicker android:id="@+id/time" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:gravity="center" android:timePickerMode="spinner" android:text="TimePicker" android:textSize="18sp" android:textColor="@android:color/black" android:textStyle="bold"/>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM