0

私はAndroidとiPhoneでsenchatouch2フレームワークを使って開発しようとしているアプリケーションを持っています。アプリケーションの向きを、1つのビューを除いて縦向きにのみ設定したい。このビューは、デバイスの向きが「縦向き」の場合は縦向きのビューを読み込み、デバイスの向きが「横向き」の場合は横向きのビューを読み込みます

今のところ、Androidでphonegapを使用しており、向きを縦向きに固定しています。

しかし、向きに応じて「ポートレートビュー」または「ランドスケープビュー」のいずれかをロードするビューを作成することになると、私はかなり迷っています。また、phonegapで向きを縦向きに固定すると、向きが検出されますか?

助けてくれてありがとう

4

2 に答える 2

1

私の質問からの答えがなければ、私は自分自身に答えます。

たとえば、Android(phonegap)では、マニフェストで方​​向を次のように定義します。

android:screenOrientation = "sensor"

次に、アクティビティでアプリケーションを開始する前に、アプリケーションでPortraitのみを使用する場合は、portraitに設定します。setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); super.loadUrl( "file:///android_asset/www/index.html");

JSで、横向き/縦向きを使用する場合は、カスタムsetOrientationコードを呼び出すアクションを使用してコマンドをメインアプリケーションに送信します。

onSetOrientationSuccess: function(result) {
    ...
},
onSetOrientationError: function(err) {
    ... 
},

setOrientation: function(orientation) {

    PhoneGap.exec(this.onSetOrientationSuccess, this.onSetOrientationError, "OrientationPlugin", orientation, []);
},

OrientationPluginは、アクションをチェックして適切なコードを呼び出す単純なphonegapプラグインです。

public class OrientationPlugin extends Plugin {

public static final String ACTION="undefined";

@Override
public PluginResult execute(String action, JSONArray data, String callbackId) {
    Log.d("OrientationPlugin", "Plugin called");
    PluginResult result = null;
    YourActivity activity = (YourActivity) this.ctx;
    Log.d("OrientationPlugin", "Plugin Got context");

    if (ACTION.equals(action)) {
        Log.d("OrientationPlugin", "Plugin set SCREEN_ORIENTATION_SENSOR");         
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
    }
    else {
        Log.d("OrientationPlugin", "Plugin set SCREEN_ORIENTATION_PORTRAIT");               
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);         
    }
    Log.d("OrientationPlugin", "Plugin set ALL OK");            
    result = new PluginResult(Status.OK, "ok");
    return result;
}

}

そうすれば、JSから必要なときにいつでもPORTRAITに戻すことができます。

お役に立てば幸いです。

于 2012-06-13T05:59:47.137 に答える
0

標準の向きにしたい1つのビューで、のようなカスタム値を追加しますdoLandscape: 1。app.config.Runtimeクラスでランタイムの「グローバル」値を設定するのが好きです。そうでない場合は、アプリ全体で動作する場合はナビゲーションバーにアタッチします。

Ext.define(‘MyApp.config.Runtime’,{
    singleton : true,
    config : {
        doLandscape: 0   // initialize to 0
    },
    constructor : function(config){
        this.initConfig(config);
    }
});

ビューポートで、次を追加します。

onOrientationChange: function(viewport, orientation, width, height) {
    // test trigger and values
    console.log('o:' + orientation + ' w:' + width + ' h:' + height);

    if (orientation == 'landscape' && MyApp.config.Runtime.doLandscape === 0) {
        // most often this is all that's needed to prevent change
        return false;

        // alternatively / additionally set it back to portrait manually.
        viewport.orientation = this.PORTRAIT;
    }
}

更新されたソースコードを見ると、これが方向の変更を処理して実行するビューポートのデフォルトコードです。

onOrientationChange: function() {
    var currentOrientation = this.getOrientation(),
        newOrientation = this.determineOrientation();

    if (newOrientation !== currentOrientation) {
        this.fireOrientationChangeEvent(newOrientation, currentOrientation);
    }
},

fireOrientationChangeEvent: function(newOrientation, oldOrientation) {
    var clsPrefix = Ext.baseCSSPrefix;
    Ext.getBody().replaceCls(clsPrefix + oldOrientation, clsPrefix + newOrientation);

    this.orientation = newOrientation;

    this.updateSize();
    this.fireEvent('orientationchange', this, newOrientation, this.windowWidth, this.windowHeight);
}

ネイティブでパッケージ化しているため、このオプションは別の方法として利用できます。

Ext.device.Orientation.on({
    scope: this,
    orientationchange: function(e) {
        console.log('Alpha: ', e.alpha);
        console.log('Beta: ', e.beta);
        console.log('Gamma: ', e.gamma);
    }
});
于 2014-03-02T02:40:18.510 に答える