Xamarin.Android中基于设备类型的锁定方向

时间:2018-07-05 07:29:53

标签: android xamarin.android mvvmcross splash-screen screen-orientation

我们正在使用MvvmCross开发Xamarin.Android应用程序,该应用程序需要支持以下配置:

  • 平板电脑-仅横向模式。
  • 电话-仅纵向模式。

即对于手机,我们需要将方向锁定为纵向模式;对于平板电脑,则需要横向锁定。

我们尝试通过以下方法实现这一目标:

如该答案所示: https://stackoverflow.com/a/14793611/4207981

我们在值和values-sw600dp资源文件夹中设置布尔资源。

值:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="isTablet">false</bool>
</resources>

values-sw600dp:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="isTablet">true</bool>
</resources>

然后在Splash活动的OnCreate方法中,检查bool资源,并根据bool资源值检查设置为纵向还是横向的RequestedOrientation。

[Activity(
    Theme = "@style/SplashScreenImage"
    , MainLauncher = true
    , NoHistory = true)]
public class SplashScreen : MvxSplashScreenActivity
{
    protected override void OnCreate(Bundle bundle)
    {
        bool isTablet = Resources.GetBoolean(Resource.Boolean.isTablet);
        if (isTablet)
            RequestedOrientation = ScreenOrientation.Landscape;
        else
            RequestedOrientation = ScreenOrientation.Portrait;

        base.OnCreate(bundle);

    }
}

会发生什么?

当我在平板电脑上以纵向模式启动该应用程序时,

  • 首先,启动屏幕以纵向模式加载。
  • 然后启动飞溅活动的OnCreate内的代码,检查bool值,并将请求的方向设置为横向,因为它是平板电脑设备。
  • 用户看到的是,首先启动屏幕处于纵向模式,然后自动旋转为横向。

这与RustamGalljamov在Xamarin论坛帖子中所说的内容保持一致 https://forums.xamarin.com/discussion/2907/locking-orientation-android

我相信启动屏幕首先以纵向加载的原因是由于我们将主题设置为活动的属性

[Activity(
    Theme = "@style/SplashScreenImage"
    , MainLauncher = true
    , NoHistory = true)]

当我们从“活动”属性中删除该主题并在检查活动的OnCreate中的设备类型后设置了主题时,

protected override void OnCreate(Bundle bundle)
    {
        bool isTablet = Resources.GetBoolean(Resource.Boolean.isTablet);
        if (isTablet)
            RequestedOrientation = ScreenOrientation.Landscape;
        else
            RequestedOrientation = ScreenOrientation.Portrait;
        SetTheme(Resource.Style.SplashScreenImage);
        base.OnCreate(bundle);

    }
  • 我们首先获得空白屏幕1或2秒
  • 然后根据设备类型以正确的方向加载启动屏幕。

我们还尝试使用SetContentView而不是SetTheme扩大布局。这样一来,首先会显示白色屏幕,然后显示正确的布局,但是这次比SetTheme延迟了更多时间。

在本机android中,我已经看到这种方法可以很好地工作。但是在Xamarin.Android的情况下,我面临上述问题。

我们是在做错什么,还是可以根据设备类型来锁定活动方向?

0 个答案:

没有答案