如何在Android上创建日期微调器

如何创建打开日期选择器对话框的Android微调器

我想要一个看起来像日历应用程序中的Spinner的Spinner,如下面的屏幕截图所示。

Android日历应用的屏幕截图,突出显示所需的GUI元素

我已经尝试过的:

我在布局XML中创建了一个微调器,并尝试设置onclick属性来调用显示对话框的方法。 当我在“点击”中输入方法名称时,我得到了错误,上面写着“找不到以下类: – Spinner(更改为android.widget.Spinner,修复构建路径,编辑XML)”。

 

showDatePickerDialog在正确的类中:

 public void showDatePickerDialog(View v) { DialogFragment newFragment = new DatePickerFragment(); newFragment.show(getFragmentManager(), "Date"); } 

这是DatePickerFragment(从其他网站复制):

 import java.util.Calendar; import android.app.DatePickerDialog; import android.app.Dialog; import android.app.DialogFragment; import android.os.Bundle; import android.widget.DatePicker; public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Use the current date as the default date in the picker 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); } public void onDateSet(DatePicker view, int year, int month, int day) { // Do something with the date chosen by the user } } 

解:

我在另一个问题上find了解决方案。

我在布局文件中使用了一个普通的微调器,然后在我的activity类中,有这样的代码:

 dateSpinner = (Spinner)findViewById(R.id.spinner_date); View.OnTouchListener Spinner_OnTouch = new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_UP) { showDatePickerDialog(v); } return true; } }; View.OnKeyListener Spinner_OnKey = new View.OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { showDatePickerDialog(v); return true; } else { return false; } } }; dateSpinner.setOnTouchListener(Spinner_OnTouch); dateSpinner.setOnKeyListener(Spinner_OnKey); 

它似乎有点被黑,但它确实有效。 有谁知道更简洁的方法吗? 它不会让我在微调器上设置setOnClickListener()或setOnItemClickListener()。

我认为一般来说人们在这种情况下做的是使用一个按钮,它就像一个微调器( 这里的方法 , 我认为是一个更好的方法 ,主要是将样式设置为android.R.attr.spinnerStyle ),或者他们使用微调器但重载单击操作以创建对话框。

当然,最困难的部分是创建自定义对话框,它具有漂亮的月/日/年旋转 – 即事物(它们不是旋转器……它们有点像老虎机或其他东西)!

有几种方法你可以去做,这里有一些谷歌文档,你可以随时解除android源代码 (虽然有明显的缺点)。

我很容易实现它。 它看起来完全像日历应用程序:)

使用TextView并为其指定微调器样式:

  

对于没有Holo主题的API 10及更低版本,请使用:

 style="@android:style/Widget.Spinner" 

按钮是最好的方法,您只需更改按钮样式即可。 我试图将默认的android微调器样式设置为我的按钮,但它无法正常工作。 所以我制作了自己的风格(它是默认微调器样式的副本)。 这里是:

  `      

`

您将在.. \ sdk \ platforms \ android – %% \ data \ res \ drawable中find的图像。

这对我来说很好。 这是制作按钮微调器样式的简单方法,就像Google日历上的微调器一样。