0

我有一个 BlackBerry 10 本机应用程序,它只能横向运行。我的标签bar-descriptor.xml下有以下代码<qnx>

<initialWindow>
    <aspectRatio>landscape</aspectRatio>
    <autoOrients>false</autoOrients>
    <systemChrome>none</systemChrome>
    <transparent>false</transparent>
</initialWindow>

但是,当我启动应用程序时,它总是以纵向模式启动。我还需要做什么才能使应用程序以横向模式启动?

4

3 回答 3

1

您还必须在 qml 文件中定义它,即。关于信号创建完成

onCreationCompleted: {
        OrientationSupport.supportedDisplayOrientation = SupportedDisplayOrientation.DisplayLandscape;
}

或者在 c++ 中,您可以在应用程序构造函数中定义它:

OrientationSupport::instance()
      .setSupportedDisplayOrientation(SupportedDisplayOrientation::DisplayLandscape);

您在以下位置查看文档:https ://developer.blackberry.com/cascades/documentation/dev/orientation/index.html

于 2012-12-03T05:41:35.693 回答
0

事实证明,您必须在您的应用程序初始化代码中调用其中的<initialWindow>声明,以便告诉导航器方向已锁定。bar-descriptor.xmlnavigator_rotation_lock(true)

http://developer.blackberry.com/native/reference/com.qnx.doc.bps.lib_ref/com.qnx.doc.bps.lib_ref/topic/navigator_rotation_lock.html

于 2012-12-03T22:58:23.120 回答
0

“我原来”在收到 NAVIGATOR_WINDOW_ACTIVE 时必须调用一些东西:

    bps_event_t *event = NULL;

    for (;;)
    {
        if (BPS_SUCCESS != bps_get_event(&event, 0))
        {
            fprintf(stderr, "bps_get_event failed\n");
            break;
        }

        if (event)
        {
            int domain = bps_event_get_domain(event);

            if (domain == navigator_get_domain())
            {
                UINT ID = bps_event_get_code(event);
                if (ID == NAVIGATOR_EXIT)
                {
                    exit_application = 1;
                }
                else if(ID == NAVIGATOR_WINDOW_ACTIVE)
                {
                   SetRotationDammIt();                                        
                }
             }
         }
     }
     //...
     void SetRotationDammIt()
     {
            int angle = 90;
            screen_set_window_property_iv( screen_win, SCREEN_PROPERTY_ROTATION, &angle);
            navigator_set_orientation(NAVIGATOR_RIGHT_UP, NULL);
     }

不过,还有几件事需要解决。您需要将 X 与 Y 切换以获取分辨率,因为窗口本身仍处于纵向模式(X < Y),并且您还必须使用以下输入进行 switch-aroo:

        float RatioX = TouchX / PortraitX;
        float RatioY = TouchY / PortraitY;
        Vector2 Res( PortraitY, PortraitX );
        Vector2 RealCoords( RatioX * Res.x, RatioY * Res.y );

这似乎只发生在最新的模拟器上(版本 10.1.0.1720 并注意我没有物理设备,以防万一这对你不起作用),在旧的模拟器上它只适用于清单设置(出于某种原因),但我需要这个来播放 .wav 文件,因为旧文件不能。

于 2013-05-27T09:14:33.760 回答