Xamarin表单中ContentPage旋转的问题

时间:2019-06-13 21:55:59

标签: android xamarin.forms custom-controls

我正在为我的新项目开发某些功能,在该功能中,我需要始终以纵向显示内容页面。我已经实现了这一点,方法是实现自定义渲染器并覆盖Android的OnWindowVisibilityChanged(目前我还没有进入iOS)。问题是当我从纵向一个页面转到新页面时,下一个页面必须同时支持两种方向,但是仅以纵向显示。

我想有一种方法可以实现此目的,而无需为我需要在固定方向的页面之后显示的每个页面实现自定义渲染器。

有什么建议吗?

这是我最重要的OnWindowVisibilityChanged

实现
protected override void OnWindowVisibilityChanged([GeneratedEnum] ViewStates visibility)
{
    base.OnWindowVisibilityChanged(visibility);

    var activity = (Activity)Context;

    if (visibility.Equals(ViewStates.Gone))
    {
        // go back to previous orientation
        activity.RequestedOrientation = _previousOrientation;
    }
    else if (visibility.Equals(ViewStates.Visible))
    {
        if (_previousOrientation.Equals(ScreenOrientation.Sensor))
        {
            _previousOrientation = activity.RequestedOrientation;
        }

        activity.RequestedOrientation = ScreenOrientation.Portrait;
    }
}

1 个答案:

答案 0 :(得分:0)

这是一个名为Xamarin.Plugin.DeviceOrientation的插件 您可以使用它,这将轻松解决您的问题。

例如,查看此切换条件

switch (orientation)
        {
            case DeviceOrientations.Free:
                CrossDeviceOrientation.Current.UnlockOrientation();
                break;
            case DeviceOrientations.Landscape:
                CrossDeviceOrientation.Current.LockOrientation(Plugin.DeviceOrientation.Abstractions.DeviceOrientations.Landscape);
                break;
            case DeviceOrientations.Portrait:
                CrossDeviceOrientation.Current.LockOrientation(Plugin.DeviceOrientation.Abstractions.DeviceOrientations.Portrait);
                break;
            default:
                break;
        }

仅一页,您可以在onApperaing()上调用它 CrossDeviceOrientation.Current.LockOrientation(Plugin.DeviceOrientation.Abstractions.DeviceOrientations.Portrait);

再次释放方向,请在onDiappearing()上调用

CrossDeviceOrientation.Current.UnlockOrientation();

有关更多信息和使用方法,请访问此链接,https://github.com/wcoder/Xamarin.Plugin.DeviceOrientation