【问题标题】:How to rotate screen manual as well automatic in Xamarin.forms如何在 Xamarin.forms 中手动和自动旋转屏幕
【发布时间】:2021-07-26 00:11:58
【问题描述】:

我需要将屏幕从纵向旋转到横向。即使我没有倾斜手机,我也应该留在横向。纵向和横向具有不同的视图,带有用于更改方向的按钮,并且位于我使用内容模板处理的同一内容页面中。所以,现在我想在倾斜手机或点击任一视图中的按钮以改变方向时自动旋转。

  1. 纵向 -> 使用按钮更改横向,然后我应该保持横向视图,直到发生一次旋转。
  2. 例如:- 现在,我使用传感器进入横向模式,如果我点击按钮进行旋转,我将处于横向模式,然后我应该改变纵向并保持在那里。

我想满足这两种情况。如何在 Android 和 iOS (Xamarin.Forms) 中实现这一点?

任何人都面临这种用例,如果你有解决方案。帮帮我。

【问题讨论】:

    标签: android xamarin.forms orientation orientation-changes


    【解决方案1】:

    使用 Xamarin.Forms 时,支持的控制设备方向的方法是使用每个单独项目的设置。

    您可以在依赖服务中调用以下方法。

    创建接口:

      public interface IOrientationService
    {
        void Landscape();
        void Portrait();
    }
    

    安卓:

    public class OrientationService : IOrientationService
    {
    public void Landscape()
    {
        ((Activity)Forms.Context).RequestedOrientation = ScreenOrientation.Landscape;
    }
    
    public void Portrait()
    {
        ((Activity)Forms.Context).RequestedOrientation = ScreenOrientation.Portrait;
    }
    }
    

    iOS:

     public class OrientationService : IOrientationService
    {
     public void Landscape()
    {
        AppDelegate appDelegate = (AppDelegate)UIApplication.SharedApplication.Delegate;
        appDelegate.allowRotation = true;
    
        UIDevice.CurrentDevice.SetValueForKey(new NSNumber((int)UIInterfaceOrientation.LandscapeLeft), new NSString("orientation"));   
    }
    
    public void Portrait()
    {
        AppDelegate appDelegate = (AppDelegate)UIApplication.SharedApplication.Delegate;
        appDelegate.allowRotation = true;
    
        UIDevice.CurrentDevice.SetValueForKey(new NSNumber((int)UIInterfaceOrientation.Portrait), new NSString("orientation"));
    }
    }
    

    依赖服务的使用可以参考下面的链接。 How can I block rotation to only allow portrait mode in xamarin forms?

    1. 我只想在我的应用中自动和手动旋转一页。

    当您进行导航时,您可以在 OnAppearing 事件中加载页面之前进行定位。

     protected override void OnAppearing()
        {
            base.OnAppearing();
            DependencyService.Get<IOrientationService>().Landscape();
        }
    
    1. 纵向和横向视图不同。

    Liek 1.,您可以使用 OnAppearing() 事件在每个页面中设置您想要的方向。

    1. 我不应该以任何原因锁定特定页面,但是当我想手动更改方向时,我应该能够做到这一点。即使我没有旋转/倾斜手机。

    如果您想手动执行此操作,请在点击事件中调用 LandscapePortrait 或点击或其他方式。

    【讨论】:

    • 我的要求不是这个。为了清楚起见,我将提及以下内容。 1. 我只想在我的应用程序中自动和手动旋转一页。 2. 纵向和横向视图不同。 3. 我不应该以任何原因锁定特定页面,但是当我想手动更改方向时,我应该能够做到这一点。即使我没有旋转/倾斜手机。
    • 两个页面都是控制模板,我的意思是我在内容页面中使用的。因此,一个模板应该设计为纵向,另一个模板用于横向。简单的例子,如果我把手机竖着,然后点击按钮来改变横向模板,它应该会显示横向视图。但实际上它并没有真正旋转。所以我所做的是我设计了一个视图,它将以纵向显示横向视图并旋转所有控件。如果页面没有控制权,这是可能的。为了克服这个问题,任何人都有任何解决方案。
    • 提供您尝试过的代码,不仅用于描述。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    相关资源
    最近更新 更多