gpt4 book ai didi

android - 在 Android 5.0+ Lollipop 中从 DatePicker 隐藏日、月或年

转载 作者:可可西里 更新时间:2023-11-01 19:10:12 26 4
gpt4 key购买 nike

我一直在寻找一种解决方案来从 DatePicker 中隐藏以下任何一个微调器。对于 Android 5.0,内部变量发生了变化,在我的例子中,在我的设备更新后,日期和月份微调器再次可见。

Android 4.4 和 Kitkat 解决方案

DatePicker dpDate = (DatePicker) findViewById(R.id.dpDate);

// Initialize Date Picker
int year = dpDate.getYear();
int month = dpDate.getMonth();
int day = dpDate.getDayOfMonth();
dpDate.init(year, month, day, this);

Field f[] = dpDate.getClass().getDeclaredFields();
for (Field field : f)
{
// Hides the DAY spinner
if(field.getName().equals("mDayPicker") || field.getName().equals("mDaySpinner"))
{
field.setAccessible(true);
Object dayPicker = new Object();
dayPicker = field.get(dpDate);
((View) dayPicker).setVisibility(View.GONE);
}

// Hides the MONTH spinner
if(field.getName().equals("mMonthPicker") || field.getName().equals("mMonthSpinner"))
{
field.setAccessible(true);
Object monthPicker = new Object();
monthPicker = field.get(dpDate);
((View) monthPicker).setVisibility(View.GONE);
}

// Hides the YEAR spinner
if(field.getName().equals("mYearPicker") || field.getName().equals("mYearSpinner"))
{
field.setAccessible(true);
Object yearPicker = new Object();
yearPicker = field.get(dpDate);
((View) myearPicker).setVisibility(View.GONE);
}
}

Android 5.0+ Lollipop 解决方案

    DatePicker dpDate = (DatePicker) findViewById(R.id.dpDate);

// Initialize Date Picker
int year = dpDate.getYear();
int month = dpDate.getMonth();
int day = dpDate.getDayOfMonth();
dpDate.init(year, month, day, this);

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
int daySpinnerId = Resources.getSystem().getIdentifier("day", "id", "android");
if (daySpinnerId != 0)
{
View daySpinner = dpDate.findViewById(daySpinnerId);
if (daySpinner != null)
{
daySpinner.setVisibility(View.GONE);
}
}
}

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
int monthSpinnerId = Resources.getSystem().getIdentifier("month", "id", "android");
if (monthSpinnerId != 0)
{
View monthSpinner = dpDate.findViewById(monthSpinnerId);
if (monthSpinner != null)
{
monthSpinner.setVisibility(View.GONE);
}
}
}

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
int yearSpinnerId = Resources.getSystem().getIdentifier("year", "id", "android");
if (yearSpinnerId != 0)
{
View yearSpinner = dpDate.findViewById(yearSpinnerId);
if (yearSpinner != null)
{
yearSpinner.setVisibility(View.GONE);
}
}
}

我在这里找到了这个问题的上述解决方案: Custom Date Picker Dialog in Android Lollipop

我想确保它易于搜索,以便其他人可以从中受益,所以我创建了这篇新帖子。 (解决方案花了我几个小时才找到并理解,所以我希望能帮助到这个问题的人)。

我已经对此进行了测试,它运行良好。事实上,如果你把 Lollipop 的解决方案放在前面,然后在它下面,在代码中,放上 Kitkat 的解决方案,那么它是兼容两个版本的,没有干扰。 (确保使用 try/catch ;)

编辑 7.22.2015:我认为很明显,如果一个人正在使用 DatePicker,它需要被初始化。我包含的代码表明您需要在运行其余代码之前初始化 DatePicker(在这两种情况下),否则您的 View 将抛出 NullPointerException。这包括抛出 null 的 yearSpinner。此外,您应该至少有一个日期 View ,不要隐藏所有 3 个 View ,即不要同时隐藏日、月和年。

最佳答案

非常简单,但不直观。

首先从DialogPicker更改主题

new DatePickerDialog(getActivity(),android.R.style.Theme_Holo_Dialog, this, year,month, day);

现在,是的,您可以隐藏任何微调器。

dialog.getDatePicker().findViewById(getResources().getIdentifier("day","id","android")).setVisibility(View.GONE);

在 5.0.2 API 21 中对我来说工作正常

关于android - 在 Android 5.0+ Lollipop 中从 DatePicker 隐藏日、月或年,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30789907/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com