如何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);