Xamarin.Android: 如何处理 TimePicker 小部件的弃用问题?
Xamarin.Android: How to handle deprecacy issue with TimePicker widget?
我正在创建一个简单的应用程序,其中 TimePicker
s 用于捕获小时和分钟。我使用如下代码来执行此操作:
end.AddHours(view.FindViewById<TimePicker>(Resource.Id.endPicker).Hour);
end.AddMinutes(view.FindViewById<TimePicker>(Resource.Id.endPicker).Minute);
问题出在 Hour
和 Minute
属性上,而 end 是 DateTime
.
在 KitKat API lvl 19 上,Visual Studio 给我以下错误:
然而,在 MarshMallow API 等级 23 上,该应用程序运行良好。所以问题一定是 Java getCurrentMinute/Hour
方法在后来的 API 中被交换为 getMinute/Hour
方法,因为它被写成 。有没有办法在较早的 API 中使用较早的方法,而在较晚的方法中使用最新的方法?我可以将其编码到我的 Xamarin.Android 应用程序中吗?在本机 Android 中,我当然会检查 SDK 版本并相应地使用 Java 方法,但我不知道我是否可以强制底层 Java 代码以这种方式运行。
更新
按照 Janmejoy 的建议,我创建了一个 if
语句来检查 Android 版本在像这样有问题的情况下并使用了弃用的代码:
if(((int)Android.OS.Build.VERSION.SdkInt) < 23)
{
start = new DateTime(1, 1, 1, (int)view.FindViewById<TimePicker>(Resource.Id.startPicker).CurrentHour,
(int)view.FindViewById<TimePicker>(Resource.Id.startPicker).CurrentMinute, 0);
end = new DateTime(1, 1, 1, (int)view.FindViewById<TimePicker>(Resource.Id.endPicker).CurrentHour,
(int)view.FindViewById<TimePicker>(Resource.Id.endPicker).CurrentMinute, 0);
}
这似乎可行,但是,我的应用程序在模拟的 KitKat 设备上运行速度非常慢(它在 1 GB 的 Marsh 上运行完美,但在具有 762 MB RAM 的早期设备上似乎有问题)。更糟糕的是,该应用程序现在在 Marsh 和 KitKat 上看起来一样,表现出相同的错误行为。我从两台设备上删除了应用程序,注释掉不推荐使用的代码并完成了 RebuildAll,但这种奇怪的行为仍然存在。有人见过类似的吗?可能是什么问题?
In Native Android I would of course check the SDK version and use
Java methods accordingly,
是的,你是对的!您也可以在 Xamarin 中这样尝试
if (((int)Android.OS.Build.VERSION.SdkInt) >= 23){
//
}
else{//}
@见https://developer.xamarin.com/api/property/Android.OS.Build+VERSION.SdkInt/
我正在创建一个简单的应用程序,其中 TimePicker
s 用于捕获小时和分钟。我使用如下代码来执行此操作:
end.AddHours(view.FindViewById<TimePicker>(Resource.Id.endPicker).Hour);
end.AddMinutes(view.FindViewById<TimePicker>(Resource.Id.endPicker).Minute);
问题出在 Hour
和 Minute
属性上,而 end 是 DateTime
.
在 KitKat API lvl 19 上,Visual Studio 给我以下错误:
然而,在 MarshMallow API 等级 23 上,该应用程序运行良好。所以问题一定是 Java getCurrentMinute/Hour
方法在后来的 API 中被交换为 getMinute/Hour
方法,因为它被写成
更新
按照 Janmejoy 的建议,我创建了一个 if
语句来检查 Android 版本在像这样有问题的情况下并使用了弃用的代码:
if(((int)Android.OS.Build.VERSION.SdkInt) < 23)
{
start = new DateTime(1, 1, 1, (int)view.FindViewById<TimePicker>(Resource.Id.startPicker).CurrentHour,
(int)view.FindViewById<TimePicker>(Resource.Id.startPicker).CurrentMinute, 0);
end = new DateTime(1, 1, 1, (int)view.FindViewById<TimePicker>(Resource.Id.endPicker).CurrentHour,
(int)view.FindViewById<TimePicker>(Resource.Id.endPicker).CurrentMinute, 0);
}
这似乎可行,但是,我的应用程序在模拟的 KitKat 设备上运行速度非常慢(它在 1 GB 的 Marsh 上运行完美,但在具有 762 MB RAM 的早期设备上似乎有问题)。更糟糕的是,该应用程序现在在 Marsh 和 KitKat 上看起来一样,表现出相同的错误行为。我从两台设备上删除了应用程序,注释掉不推荐使用的代码并完成了 RebuildAll,但这种奇怪的行为仍然存在。有人见过类似的吗?可能是什么问题?
In Native Android I would of course check the SDK version and use Java methods accordingly,
是的,你是对的!您也可以在 Xamarin 中这样尝试
if (((int)Android.OS.Build.VERSION.SdkInt) >= 23){
//
}
else{//}
@见https://developer.xamarin.com/api/property/Android.OS.Build+VERSION.SdkInt/