我正在使用一个基本的DatePicker,我正试图找出如何在DatePickerDialog上隐藏Year字段,以便只显示Month和Day。我不介意今年的基础代码仍然存在,我只想在对话框中隐藏年份字段。你知道的是:
((View) myYear).setVisibility(View.GONE);
我知道它不起作用,因为myYear是一个int而不是一个View,但是沿着这些方向。有可能吗?
答案 0 :(得分:22)
我发现实现DatePicker的一种非常简单的方法是在xml中调用它:
<DatePicker
android:id="@+id/thePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
然后在java中隐藏你想要的任何字段(在本例中为年份):
picker = (DatePicker) findViewById(R.id.thePicker);
try {
Field f[] = picker.getClass().getDeclaredFields();
for (Field field : f) {
if (field.getName().equals("mYearPicker")) {
field.setAccessible(true);
Object yearPicker = new Object();
yearPicker = field.get(picker);
((View) yearPicker).setVisibility(View.GONE);
}
}
}
catch (SecurityException e) {
Log.d("ERROR", e.getMessage());
}
catch (IllegalArgumentException e) {
Log.d("ERROR", e.getMessage());
}
catch (IllegalAccessException e) {
Log.d("ERROR", e.getMessage());
}
答案 1 :(得分:8)
要非常小心这个解决方案。您正在使用反射来访问字段并更改可见性。这不适用于Android 5.0! Google已经更改了TimePicker和DatePicker的实现,并且这些类不再显示代理中的任何字段appart。
我还不知道Android 5.0 +的解决方案。我会在发现一些有趣内容后立即通知您。
作为一个想法,你可以使用Build.VERSION.SDK_INT检查Android版本,然后尝试使用反射访问DatePickerSpinnerDelegate并设置你想要的字段。
同样,这不是理想的解决方案,因为谷歌可以一次又一次地改变它......
答案 2 :(得分:0)
在日期选择器中禁用年份字段的简便方法
DatePicker dp = findDatePicker((ViewGroup) dialog.getWindow().getDecorView());
if(dp != null)
{
((ViewGroup) ((ViewGroup) dp.getChildAt(0)).getChildAt(0)).getChildAt(2).setEnabled(false);
((ViewGroup) ((ViewGroup) dp.getChildAt(0)).getChildAt(0)).getChildAt(2).setAlpha(0.4f);
}
如果你想删除年份字段,只需将结果视图设置为View.GONE,如下所示
dp.getChildAt(0)).getChildAt(0)).getChildAt(2).setVisibility(View.GONE)
private DatePicker findDatePicker(ViewGroup group) {
if (group != null) {
for (int i = 0, j = group.getChildCount(); i < j; i++) {
View child = group.getChildAt(i);
if (child instanceof DatePicker) {
return (DatePicker) child;
} else if (child instanceof ViewGroup) {
DatePicker result = findDatePicker((ViewGroup) child);
if (result != null)
return result;
}
}
}
return null;
}
我已在下面提到链接以供参考 Remove year from DatePickerDialog
答案 3 :(得分:0)
您可以使用此功能设置年份范围
public function rawQuery()
{
$data = 'SELECT * FROM "w8_w8shipment"';
$resultado = DB::select(DB::raw($data));
return response()->json(['status' => 'success', 'data' => $resultado], '200');
}
答案 4 :(得分:-1)
最近通过将日期选择器宽度设置得太小来隐藏对话框的年份部分。
<DatePicker
android:id="@+id/month_day_datepicker"
android:layout_width="140dp"
android:datePickerMode="spinner"
style="?android:attr/borderlessButtonStyle"/>
让我知道这是否行得通,显然,绑定中有可访问的年份,但是在计算日期时您无法选择该年份。