我正在开发一个手机应用程序,并且设备方向存在问题。
基本上我希望用户可以随心所欲地使用设备,无论是肖像还是风景。但是,我只希望屏幕变为纵向或横向。目前屏幕也正在逆转景观。
是否可以仅将方向更改限制为纵向和横向? (所以你总共有2个方向改变的可能性,而不是3)。
修改
我使用了一个插件(下面建议),并提出了下面的代码。一旦屏幕旋转到reverseLandscape,它将以横向模式显示(正是我想要的)。然而问题是,如果用户以纵向模式转动移动设备,则方向被锁定并且不会变回纵向。
$(window).bind('orientationchange', function(event){
if (event.orientation == 'landscape') {
navigator.screenOrientation.set('landscape');
}
if (event.orientation == 'portrait') {
navigator.screenOrientation.set('portrait');
}
});
任何人都知道我应该在哪里放置以下行以便解锁方向?
navigator.screenOrientation.set('fullSensor');
答案 0 :(得分:2)
您需要更改主要的Phonegap Activity类。首先从AndroidManifest文件中删除此行:
android:screenOrientation="portrait"
我们仍然需要:
android:configChanges="orientation|keyboardHidden"
不幸的是,我们无法在screenOrientation中配置多个方向模式。因此,我们将通过java代码更改它。
这是一个有效的代码示例:
package com.roadrunner.mobile21;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.Display;
import android.view.OrientationEventListener;
import android.view.Surface;
import com.phonegap.*;
public class RoadRunnerActivity extends DroidGap {
OrientationEventListener myOrientationEventListener;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.loadUrl("file:///android_asset/www/index.html");
myOrientationEventListener = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_NORMAL){
@Override
public void onOrientationChanged(int arg0) {
Display display;
display = getWindow().getWindowManager().getDefaultDisplay();
int rotation = display.getRotation();
if(rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90) {
unlockScreenOrientation();
}
}
};
if (myOrientationEventListener.canDetectOrientation()){
myOrientationEventListener.enable();
} else{
finish();
}
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Display display;
display = getWindow().getWindowManager().getDefaultDisplay();
int rotation = display.getRotation();
if(rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270) {
lockCurrentScreenOrientation();
}
}
private void lockCurrentScreenOrientation() {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
private void unlockScreenOrientation() {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
}
}
这很容易做到:
$(window).bind("orientationchange", function(){
var orientation = window.orientation;
var new_orientation = (orientation) ? 0 : 180 + orientation;
$('body').css({
"-webkit-transform": "rotate(" + new_orientation + "deg)"
});
});
您需要将公式更改为仅适用于0和90度方向。
答案 1 :(得分:0)
我认为你只需要使用:
<meta name="viewport" content="width=device-width, initial-scale=1">
限制3个方向更改。
修改强>
尝试此操作function onLoad() {
document.addEventListener("deviceready", onDeviceReady, false);
}
function onDeviceReady() {
document.addEventListener("orientationChanged", updateOrientation);
}
function updateOrientation(e) {
switch (e.orientation) {
case 90:
navigator.screenOrientation.set('landscape');
break;
case -90:
navigator.screenOrientation.set('landscape');
break;
}
}
答案 2 :(得分:0)