Java 如何在Android上制作日期微调器

Java 如何在Android上制作日期微调器,java,android,date,spinner,Java,Android,Date,Spinner,如何创建打开日期选择器对话框的Android微调器 我想要一个类似日历应用程序中的微调器,如下面的屏幕截图所示 我已经尝试过的: 我在布局XML中创建了一个微调器,并尝试设置onclick属性来调用显示对话框的方法。当我在click中输入一个方法名时,我得到一个错误,该错误表示找不到以下类: -微调器更改为android.widget.Spinner,修复构建路径,编辑XML <Spinner android:id="@+id/spinner1" android:layou

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

我想要一个类似日历应用程序中的微调器,如下面的屏幕截图所示

我已经尝试过的:

我在布局XML中创建了一个微调器,并尝试设置onclick属性来调用显示对话框的方法。当我在click中输入一个方法名时,我得到一个错误,该错误表示找不到以下类: -微调器更改为android.widget.Spinner,修复构建路径,编辑XML

<Spinner
    android:id="@+id/spinner1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="showDatePickerDialog" />
这是从另一个网站复制的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
    }
}
解决方案:

我找到了解决办法

我在布局文件中使用了常规微调器,然后在我的活动类中使用了以下代码:

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微调器样式设置为我的按钮,但它无法正常工作。 所以我制作了自己的样式,它是默认微调器样式的副本。这是:

    `<selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_enabled="false"
              android:drawable="@drawable/spinner_disabled_holo_light" />
        <item android:state_pressed="true"
              android:drawable="@drawable/spinner_pressed_holo_light" />
        <item android:state_pressed="false" android:state_focused="true"
              android:drawable="@drawable/spinner_focused_holo_light" />
        <item android:drawable="@drawable/spinner_default_holo_light" />
    </selector>
`

您将在..\sdk\platforms\android-%%\data\res\drawable中找到图像


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

我能够非常轻松地实现它。它与日历应用程序的外观完全相同:

使用TextView并为其提供微调器样式:

<TextView
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   style="@android:style/Widget.Holo.Spinner" />

你的问题很广泛,至少让我们看看你已经尝试了什么。你不能指望我们坐在那里几个小时为你想出复杂的方法。写你自己的代码,然后如果你有任何问题,或错误,然后回到这里。是的,我找到了我想要的答案!这当然是一个优雅的解决方案。
<TextView
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   style="@android:style/Widget.Holo.Spinner" />
style="@android:style/Widget.Spinner"