我有一个BlackBerry 10本机应用程序,只能横向运行。我在bar-descriptor.xml
标记下的<qnx>
中有以下代码:
<initialWindow>
<aspectRatio>landscape</aspectRatio>
<autoOrients>false</autoOrients>
<systemChrome>none</systemChrome>
<transparent>false</transparent>
</initialWindow>
但是,当我启动应用程序时,它始终以纵向模式启动。我还需要做些什么来使应用程序以横向模式启动?
答案 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)
,以便告知导航器方向已被锁定。
答案 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 这似乎只发生在最新的模拟器上(版本10.1.0.1720并注意我没有物理设备,以防万一这对你不起作用),对于较旧的模拟器它只适用于清单设置(由于某种原因),但我需要这个才能播放.wav文件,因为旧文件无法播放。 float RatioX = TouchX / PortraitX;
float RatioY = TouchY / PortraitY;
Vector2 Res( PortraitY, PortraitX );
Vector2 RealCoords( RatioX * Res.x, RatioY * Res.y );