#c# #xamarin.forms #device-orientation
#c# #xamarin.forms #ориентация устройства
Вопрос:
Мне нужно заблокировать вращение на определенной странице, и это должно работать как для Android, так и для iOS.
Я пытался использовать плагин NuGet.Ориентация устройства и добавление следующего кода
protected override void OnAppearing()
{
base.OnAppearing();
if (CrossDeviceOrientation.IsSupported)
CrossDeviceOrientation.Current.LockOrientation(Plugin.DeviceOrientation.Abstractions.DeviceOrientations.Portrait);
}
protected override void OnDisappearing()
{
base.OnDisappearing();
if (CrossDeviceOrientation.IsSupported)
CrossDeviceOrientation.Current.UnlockOrientation();
}
но выдает исключение:
System.NullReferenceException: ‘Ссылка на объект не установлена для экземпляра объекта.’
Комментарии:
1. iOS или Android? Вы включили плагин как в проекты shard, так и в platform?
2. оба, и плагин включен для обоих тоже
3. github.com/wcoder/Xamarin . Плагин. DeviceOrientation /проблемы/22
4. Описание кода серьезности Ошибка состояния подавления строки файла проекта NU1202 Package Plugin. CurrentActivity 2.1.0.4 несовместим с netstandard2.0 (.NETStandard, Version= v2.0). Плагин пакета. CurrentActivity 2.1.0.4 поддерживает: monoandroid44 (MonoAndroid, версия = v4.4)
Ответ №1:
Для Xamarin.Формы, вы могли бы обслуживать зависимости.
Создайте интерфейс:
public interface IRotate
{
void ForcePortrait();
}
Android:
[assembly: Xamarin.Forms.Dependency(typeof(RoateHandler))]
namespace RotatePage.Droid
{
class RoateHandler : IRotate
{
public void ForcePortrait()
{
((Activity)Forms.Context).RequestedOrientation = ScreenOrientation.Portrait;
}
}
}
iOS:
[assembly: Xamarin.Forms.Dependency(typeof(RoateImplementation))]
namespace RotatePage.iOS
{
class RoateImplementation : IRotate
{
public void ForcePortrait()
{
UIDevice.CurrentDevice.SetValueForKey(new NSNumber((int)UIInterfaceOrientation.Portrait), new NSString("orientation"));
}
}
}
Использование:
DependencyService.Get().ForcePortrait();
Скриншот:
Комментарии:
1. Ошибка CS0246 Не удалось найти тип или имя пространства имен ‘RoateHandler’ (вам не хватает директивы using или ссылки на сборку?) Я думал, что «Roate» была опечаткой, но попробовал «Rotate» и ошибка тоже, ха-ха. Нужно ли добавлять Nuget или ссылку?
2.
RoateHandler
Создается в части Android. Я обновил свой проект. Вы могли бы проверить на GitHub. github.com/WendyZang/Test/tree/master/RotatePage3. Спасибо, я смог попробовать это, поскольку блокирует все страницы, а не только те, где я использую line DependencyService. Получить<iRotate>().ForcePortrait();
4. Измените ответ именно на то, что я искал 🙂