从 Xamarin 中的代码推送新页面后如何旋转屏幕

Posted

技术标签:

【中文标题】从 Xamarin 中的代码推送新页面后如何旋转屏幕【英文标题】:How To Rotate the screen After Pushing a new page From code in Xamarin 【发布时间】:2020-01-04 00:48:49 【问题描述】:

标题说得差不多了,我正在推送一个包含 VideoSource 的 WebView 女巫有一个 youtube 视频嵌入 html 代码。 一旦它被推动,我需要强制它进入全屏模式。 这是我正在使用的一段代码,如果您有任何其他/更好的方法,请回答

我是新手,所以请放轻松:)

我在这个主题上搜索了一下,但无论如何我都找不到在推送时仅在 1 页上旋转屏幕。

    public partial class MainScreen : TabbedPage
    
        public HtmlWebViewSource VideoSource  get; set; 

        private const string PlayerHTML = @"<html>
             <body>  
             <iframe style='position: absolute; top: 0; left: 0; width: 100%; height: 100%;'  
             src='https://www.youtube.com/embed/6e7qKcVigQo?rel=0?autoplay=1?modestbranding=1' 
             frameborder='0' 
             allow='accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture' 
             allowfullscreen>
             </iframe>
             </body>
             </html>";

        private async void ImageButton_Clicked(object sender, EventArgs e)
        
            VideoSource = new HtmlWebViewSource
            
                Html = PlayerHTML
            ;

            var a = new ContentPage
            
                Content = new WebView()
                

                    Source = VideoSource
                
            ;
            NavigationPage.SetHasNavigationBar(a, false);
            await Navigation.PushAsync(a);
            //make the screen rotate SOMEHOW
        
    

我期望有两种解决方案;

    Xamarin 相关解决方案,例如通过到达 MainActivity.cs 来旋转屏幕 HTML/YouTube 嵌入解决方案,例如视频链接中的内容,可强制全屏播放视频...

【问题讨论】:

【参考方案1】:

您可以使用消息中心来处理 在安卓上:

   protected override void OnCreate(Bundle savedInstanceState)
    
        Current = this;
        //TabLayoutResource = Resource.Layout.Tabbar;
        ToolbarResource = Resource.Layout.Toolbar;

        base.OnCreate(savedInstanceState);
        Xamarin.Forms.Forms.Init(this, savedInstanceState);

        //allowing the device to change the screen orientation based on the rotation
        MessagingCenter.Subscribe<VideoPlayerView>(this, "allowLandScape", sender =>
        
            RequestedOrientation = ScreenOrientation.Landscape;
        );

        //during page close setting back to portrait
        MessagingCenter.Subscribe<VideoPlayerView>(this, "preventLandScape", sender =>
        
            RequestedOrientation = ScreenOrientation.Portrait;
        );

        LoadApplication(new App());
    

打电话给那个

   protected override void OnAppearing()
    
        base.OnAppearing();
        MessagingCenter.Send(this, "allowLandScape");

    

    //during page close setting back to portrait
    protected override void OnDisappearing()
    
        base.OnDisappearing();
        MessagingCenter.Send(this, "preventLandScape");

    

【讨论】:

以上是关于从 Xamarin 中的代码推送新页面后如何旋转屏幕的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xamarin 表单中创建半屏相机视图

第二次推送视图控制器xamarin ios后需要触摸以与tableview交互

推送通知上的应用程序重新加载单击 Xamarin 表单

如何在 iOS 上使用 Xamarin 旋转文件中的图像

横向旋转后推送方向变化

Xamarin 中人像模式的旋转问题