如何closuresDatePicker中的CalendarView?

在我的设置屏幕上,我有一个dateselect器小部件。 在Eclipse中的devise器中,它显示为我想要的(DMY的3个旋转器),但是当我在我的设备上进行testing时,我看到一个相当奇怪的视图,左边是一个侧面旋钮,右边是一个日历。 (!)之前从来没有见过,但做一些研究,我想我看到“CalendarView”。

我发现我应该能够将“calendarViewShown”属性设置为false,但是我的XML会抛出一个错误。 我在这里发现了另一个问题,build议API级别是责备(我minSDKLevel是7,但我的目标是11,所以我可以得到操作栏button,而不是旧菜单)。 所以我想我会尝试在代码中设置它:

int currentapiVersion = android.os.Build.VERSION.SDK_INT; if (currentapiVersion >= 11) minDateSelector.setCalendarViewShown = false; 

但是,再次,失败setCalendarViewShown找不到。 但是这里的文档说它应该存在。 有任何想法吗?!

如果您要定位更高版本的API,则可以在<DatePicker>使用以下XML(无需编写Java代码):

  android:calendarViewShown="false" 

DatePicker中的方法

  public void setCalendarViewShown (boolean shown) 

存在从API 11开始。如果你minSdkLevel = 7编译器不认为这是一个有效的方法 – 该方法不存在于android 2.3或2.2。 最好的办法就是解决这个问题就是用reflection。 像这样的东西应该正常工作:

 int currentapiVersion = android.os.Build.VERSION.SDK_INT; if (currentapiVersion >= 11) { try { Method m = minDateSelector.getClass().getMethod("setCalendarViewShown", boolean.class); m.invoke(minDateSelector, false); } catch (Exception e) {} // eat exception in our case } 

在那些情况下,我使用

 import android.os.Build; @TargetApi(Build.VERSION_CODES.HONEYCOMB) public void someThing() { [...] if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { minDateSelector.setCalendarViewShown(false); } } 

我认为可读性比使用reflection更好,风格比捕获和忽略exception要好。 当然反思的东西也在起作用。

我使用以下XMLconfiguration工作:

 android:datePickerMode="spinner" android:calendarViewShown="false" 

只有以下configuration不适合我:

 android:calendarViewShown="false" 

我遇到了和你一样的问题,我无法通过XML显示更改。

你在正确的轨道上,尝试改变你的最后一行:

 minDateSelector.setCalendarViewShown(false);