为什么我的BlackBerry 10原生应用程序不能横向运行?

时间:2012-12-02 21:42:10

标签: blackberry-10

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

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

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

3 个答案:

答案 0 :(得分:1)

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

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

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

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

您查看文档:{​​{3}}

答案 1 :(得分:0)

事实证明,除了<initialWindow>中的bar-descriptor.xml声明之外,您还必须在应用初始化代码中调用navigator_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

答案 2 :(得分: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);
     }

但还有一些事情需要解决。您需要将Y与Y切换以进行分辨率提取,因为窗口本身仍处于纵向模式(X

        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文件,因为旧文件无法播放。