如何为平板电脑启用纵向移动和纵向/横向纵向?

时间:2017-08-22 14:37:27

标签: android c++ ios qt qml

我目前正在开发一个跨平台应用程序(主要是android和ios)。我想授权用户在屏幕足够大时使用横向或纵向(让我们说宽度超过480像素)并强迫他在另一种情况下使用肖像。

我正在考虑使用QML或C ++来实现这一目标,但显然这是不可能的。所以我想我将不得不使用AndroidManifest和Info.plist for iOS。但我不知道如何在这些文件中定义条件。

关于如何设法做到这一点的任何想法/帮助?

2 个答案:

答案 0 :(得分:0)

可以使用Qt。诀窍是为每个平台包含本机代码,因为Qt不支持开箱即用。您可以通过一些工作轻松地将Android-Java和ios-objective-c代码包含到您的c ++应用程序中:

对于Android,使用Pablo中的代码创建一个java类。利用QtAndroid JNI包装器来调用这些方法(参见https://doc.qt.io/qt-5/qtandroid.htmlhttps://doc.qt.io/qt-5/qandroidjniobject.html#details)。 专业提示:您可以使用https://github.com/benlau/androidnative.pri来调用java类。它比使用JNI类要容易得多,但需要正确的设置。

对于ios,创建一个mm文件,一个object-c ++文件,您可以在其中混合使用c ++和objective-c代码。只需创建一个c ++方法,在该方法中使用object-c来存档您的目标。它与Pablos的答案非常相似,但你不能使用swift。

答案 1 :(得分:-2)

您使用的是混合应用还是原生应用? 不过,您可以根据显示宽度以编程方式更改屏幕方向。

首先获取设备显示尺寸,如果尺寸正确,请更改方向。

这里有一些代码片段。

Swift 3.0

//Get the display size
let screenSize = UIScreen.main.bounds
let screenWidth = screenSize.width
let screenHeight = screenSize.height

//Change orientation
let value = UIInterfaceOrientation.landscapeRight.rawValue
UIDevice.current.setValue(value, forKey: "orientation")

<强>的Android

//Get the display size
Point displaySize = new Point();
activity.getWindowManager().getDefaultDisplay().getRealSize(displaySize);

Rect windowSize = new Rect();
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(windowSize);

int width = displaySize.x - Math.abs(windowSize.width());
int height = displaySize.y - Math.abs(windowSize.height());

//Change orientation
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
//OR
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

如果你要使用Cordova,可以使用像这样的插件:

https://www.npmjs.com/package/cordova-plugin-screen-orientation