我有一个应用程序,我试图开发与Android和iPhone上的sencha touch 2框架。 我希望应用程序方向除了一个视图外只设置为纵向。 如果设备方向为“纵向”,则此视图将加载纵向视图;如果设备方向为“横向”,则此视图将加载横向视图
目前我在android上使用phonegap,我将方向修改为肖像。
但是,当我创建视图时,我会迷失方向,根据方向加载“纵向视图”或“横向视图”。 如果我在phonegap中将方向指向纵向,也会检测方向吗?
谢谢你的帮助
答案 0 :(得分:1)
如果没有我的问题的答案,我会回答自己。
例如,在Android(phonegap)上,在清单中将方向定义为:
机器人:screenOrientation = “传感器”
然后,在Activity中启动应用程序之前,如果您希望应用程序使用Portrait,则只将其设置为portrait: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); super.loadUrl( “文件:///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。
希望有所帮助!
答案 1 :(得分:0)
在您希望标准方向的一个视图上,添加自定义值,例如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);
}
});