如何更改Android的日期选择器样式

8
我正在制作一个注册表单,其中一个字段是用户的出生日期。我想使用日期选择器,但不想使用下面所示的日历布局:

enter image description here

我希望布局看起来像这样,这样就更容易选择年份和月份,而无需滚动查看整个页面:

enter image description here

然而,我不知道如何开始操作,也不知道应该在styles.xml文件中放置什么内容。非常感谢您提供的任何帮助。

7个回答

14

把这段代码添加到style.xml中。

<style name="date_picker_theme" parent="@android:style/Widget.DatePicker">

然后您应该像这样为日期选择器应用样式:

<DatePicker
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/datePicker"
        style="@style/date_picker_theme" />

程序设置无效?我已经尝试过了,但是没有任何改变 :( - iflorit
我认为,你可以使用DatePickerFragment和ContextThemeWrapper。 - Victor V.
创建主题包装器ContextThemeWrapper(Context base, int themeResId)的新实例,并在创建DatePickerDialog时,应将此上下文构造函数传递给它 - DatePickerDialog(Context context)。 - Victor V.
最后,我唯一有效的解决方案是创建一个AlertDialog,并将DatePicker作为视图包含在其中。谢谢! - iflorit

7

使用以下代码创建样式

<style name="DatePicker" parent="@android:style/Theme.Holo.Light">
    <item name="android:datePickerStyle">@android:style/Widget.DatePicker</item>
</style>

然后在自定义片段对话框的XML中。
<DatePicker
    android:theme="@style/DatePicker"
    android:id="@+id/fragment_date_picker_control"
    android:datePickerMode="spinner"
    android:spinnersShown="true"
    android:calendarViewShown="false"
    android:layout_marginLeft="@dimen/margin_normal"
    android:layout_marginRight="@dimen/margin_normal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal" />

链接: http://yogeshkalwar.blogspot.in/2017/08/custom-spinner-datepicker-supporting-n70.html


2
要全局设置DatePicker的样式,请在style.xml中添加以下内容或修改现有内容:
<resources>
  <style name="AppTheme" parent="@style/Theme.AppCompat.Light">
    <item name="android:datePickerStyle">@style/MyDatePicker</item>
  </style>
  ...
</resources>

定义您定制的DatePicker样式,可以在style.xml或单独的文件中进行,例如:

<resources>
  <style name="MyDatePicker" parent="@android:style/Widget.DatePicker">
    <item name="android:calendarViewShown">false</item>
    <item name="android:datePickerMode">spinner</item>
  </style>
</resources>

1

也许现在有点晚了,但你可以像这样通过编程来设置它。
将其应用于你的onClick监听器中。

        DatePickerDialog datePicker = new DatePickerDialog(
                this,
                android.R.style.Theme_Holo_Light_Dialog_MinWidth,
                datePickerListener,
                cal.get(Calendar.YEAR),
                cal.get(Calendar.MONTH),
                cal.get(Calendar.DAY_OF_MONTH));
        datePicker.setCancelable(false);
        datePicker.setTitle("Select the date");
        datePicker.show();

android.R.style.Theme_Holo_Light_Dialog_MinWidth 是创建你想要的样式。
希望对某些人有所帮助。


0

DatePickerDialog有一个方便的方法,可以设置所需的布局。

public DatePickerDialog(@NonNull Context context, @StyleRes int themeResId,
        @Nullable OnDateSetListener listener, int year, int monthOfYear, int dayOfMonth) {
    this(context, themeResId, listener, null, year, monthOfYear, dayOfMonth);
}


public static final int MODE_SPINNER = 1;
public static final int MODE_CALENDAR = 2;

传递1或2到themesResId就可以搞定了。

0
上述属性是XML的,如果您想要以编程方式进行设置,可以使用下面的代码,但我还没有确认这段代码是否有效。
datepickerDialog_object.getDatePicker().setSpinnersShown(true);
datepickerDialog_object.getDatePicker().setCalendarViewShown(false);

0

嗨,试试这个最简单的方法...

public void datePicker(final Context context, final EditText editText, final String type) {
        Calendar calendar = Calendar.getInstance();
        final SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
        DatePickerDialog datePickerDialog = new DatePickerDialog(context, R.style.DialogTheme, new DatePickerDialog.OnDateSetListener() {

            public void onDateSet(android.widget.DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                Calendar newDate = Calendar.getInstance();
                newDate.set(year, monthOfYear, dayOfMonth);
                newDate.set(year, monthOfYear, dayOfMonth);
                editText.setText(dateFormatter.format(newDate.getTime())

            }

        }, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
//        datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
        datePickerDialog.show();
    }

在style.xml中添加以下行:

android

 <style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog">
        <item name="colorAccent">@color/AppDarkBlue</item>
    </style>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接