2012-12-02 43 views
0

我有一個BlackBerry 10本機應用程序,它只能以橫向方向運行。我在我的bar-descriptor.xml標籤<qnx>下,下面的代碼:爲什麼我的BlackBerry 10本機應用程序不能橫向運行?

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

然而,當我啓動應用程序,它始終在啓動肖像模式。我還需要做什麼才能使應用程序在橫向模式下啓動?

回答

1

你必須在qml文件中定義它,也就是說。在信號creationComplete

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

或C++中,你可以在應用程序的構造函數定義它:

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

你在查看文檔:https://developer.blackberry.com/cascades/documentation/dev/orientation/index.html

+0

我沒有QML文件,它是純粹使用BlackBerry平臺服務的C++應用程序 – donturner

+0

我更新了我的答案,請檢查;我希望它能解決您的問題 – hakim

+0

非常感謝您的更新。對不起,我應該更具體:我沒有使用**瀑布**。這是一個OpenGLES應用程序,它不包含任何Cascades庫,所以我不能使用'OrientationSupport'類。 – donturner

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),你也必須做一個開關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文件,導致較舊的文件無法播放。

相關問題