2017-08-22 9 views
0

私は現在、クロスプラットフォームのアプリ(アンドロイドとアイオス主に)で作業しています。画面のサイズが十分に大きい場合(横幅が480ピクセルを超えると仮定します)、他のケースではポートレートを使用するようにユーザーに指示します。携帯端末で縦向きを有効にする方法とタブレットで横向きにする方法はありますか?

私はそれを達成するためにQMLまたはC++を使用することを考えていましたが、明らかにこれは不可能です。だから、私はAndroidManifestとInfo.plistをiOS用に使用しなければならないと思う。しかし、私はどのようにそれらのファイルの条件を定義することはできません。

どのように私がこれを行うことができたかに関するあらゆる考え/助け?

答えて

-2

ハイブリッドアプリまたはネイティブアプリを使用していますか? しかし、画面の向きをプログラムの表示幅に合わせて変更できます。

最初にデバイスの表示サイズを確認し、サイズが正しい場合は向きを変更してください。

ここにいくつかのコードスニペットがあります。

スウィフト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") 

アンドロイド

//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); 

あなたはコルドバで行っている場合は、この1のようなプラグインを使用することができます。

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

+0

私はハイブリッドアプリを使用しています。ありがとう、あなたのコードですが、私は "アクティビティ"変数はどこから来るのか分かりません。現在の活動の「インスタンスを取得する」はずですか? – highvoltage379

+0

@ highvoltage379 "activity"は、作業しているアクティビティのインスタンスを示します。 "this"、 "activity"、 "context"のいずれかであり、最後の2つはパラメータで受け取った場合です。例えば、あなたがフラグメント上にあるなら、 'this.getActivity();'を使うことができます。 –

0

Qtで行うことができます。この方法は、各プラットフォームにネイティブコードを含めることです。これは、そのままの状態でQtでサポートされていないためです。

Androidの場合、Pabloのコードを使用してJavaクラスを作成します。Androidの場合、Javaクラスとios-objective-cコードを簡単に組み込むことができます。 QtAndroid JNIラッパーを使用してこれらのメソッドを呼び出します(https://doc.qt.io/qt-5/qtandroid.htmlおよびhttps://doc.qt.io/qt-5/qandroidjniobject.html#detailsを参照)。 プロヒント:https://github.com/benlau/androidnative.priを使用すると、Javaクラスを呼び出すことができます。 JNIクラスを使用するよりもずっと簡単ですが、正しいセットアップが必要です。

iosの場合、オブジェクト++のファイルであるmmを作成します。このファイルでは、C++コードとobjective-cコードを混在させることができます。単にC++メソッドを作成し、そのメソッドでobject-cを使用して目標をアーカイブします。それはPablosの答えに最もよく似ていますが、あなたは迅速に使うことはできません。

+0

まず、すべてのアドバイスに感謝します。私は、Javaメソッドを呼び出すためにQtAndroid JNIラッパーを使用することができますが、今は止まっています。私がパブロに語ったように、私は自分のコードで「活動」をどのようにしなければならないのか分かりません。 C++からjavaメソッドを呼び出すと、これをパラメータに渡すはずですか? – highvoltage379

+0

私はAndroidで動作させることはできませんでしたが、今はiOSで試してみるつもりです。 – highvoltage379

+0

既に持っていても、2つの "クリーンな"方法があります。 'QtActivity'(Javaで直接)を拡張するカスタムクラスにコードを追加するか、' QtAndroid :: androidActivity'を使ってC++からコードを取得します。他にも安全な方法があります。 – Felix

関連する問題