2012-03-21 15 views
32

Empecé a buscar en PhoneGap ayer y creé un simple "mármol" rodando mientras inclinaba el teléfono. Actualmente estoy desarrollando Android, pero quiero que la orientación se mantenga como un paisaje en lugar de moverse cuando el teléfono se mueva. ¿Hay alguna forma de hacer esto?PhoneGap - Forcing Landscape orientation

Manifiesto:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.phonegap.helloworld" 
    android:versionCode="1" 
    android:versionName="1.0" > 
<supports-screens 
    android:largeScreens="true" 
    android:normalScreens="true" 
    android:smallScreens="true" 
    android:resizeable="true" 
    android:anyDensity="true" 
/> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.VIBRATE" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.WRITE_CONTACTS" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.BROADCAST_STICKY" /> 
<uses-sdk android:minSdkVersion="8" /> 
    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <activity 
      android:name=".App" 
      android:configChanges="orientation|keyboardHidden" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name="com.phonegap.DroidGap" 
      android:label="@string/app_name" 
      android:screenOrientation="landscape" 
      android:configChanges="orientation|keyboardHidden"> 
      <intent-filter></intent-filter> 
     </activity> 
    </application> 
</manifest> 

Código:

package com.phonegap.helloworld; 

import android.os.Bundle; 
import org.apache.cordova.*; 

public class App extends DroidGap { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     super.loadUrl("file:///android_asset/www/index.html"); 
    } 
} 
+0

Después de que la versión de Apache Cordova 3.0 modifique AndroidManifest.xml se romperá el flujo de trabajo de desarrollo de Cordova. Use un plugins en su lugar. Ver posible respuesta duplicada aquí: http://stackoverflow.com/questions/20294090/cordova-3-1-oriention-not-working/21165941#21165941 – sgimeno

Respuesta

45

¿Has probado esto?

android:screenOrientation="portrait" 

Dentro del archivo AndroidManifest.xml, en la que han declarado su actividad, sólo tiene que añadir la línea anterior.

Por ejemplo:

<activity 
      android:name=".Activity.SplashScreenActivity" 
      android:label="@string/app_name" 
      android:screenOrientation="portrait"> 
      <intent-filter> 
       <action 
        android:name="android.intent.action.MAIN" /> 
       <category 
        android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
+0

Lo agregué a la etiqueta de actividad incorrecta, ¡así que este fue un ganador! vítores –

+0

@mayur Bueno atrapado. –

+0

funcionó para mí! Gracias. –

3

Por favor, intente esto en su actividad. Dentro de onCreate() y antes de setContentView.

// keeps the screen orientation in Landscape mode 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
+5

no estoy seguro de dónde poner esto, no he tocado java antes. –

+0

@PhilJackson Dentro del método onCreate() de la actividad principal :-) – Gattsu

7

Es muy simple, es necesario agregar android:screenOrientation="landscape" en su archivo .xml AndroidManifest.

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name=".LogUploaderActivity" android:label="Log Uploader" android:screenOrientation="landscape" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
+0

¡funciona! ¡Gracias! –

27

La forma correcta de hacer esto para todos los dispositivos es configurar config.xml

<preference name="orientation" value="portrait" /> 

<preference name="orientation" value="landscape" /> 

https://build.phonegap.com/docs/config-xml

+7

Phonegap parece estar ignorando estas configuraciones para mí, independientemente de su valor. – apanosa

+0

Idealmente, esto funcionaría perfectamente en todas las plataformas PhoneGap. Mi teoría es que PhoneGap WebView puede estar bloqueado a una orientación determinada, pero su Actividad de contenido gira de acuerdo con las propiedades en AndroidManifest.xml. Sin embargo, todavía creo que esto podría solucionarlo PhoneGap; PhoneGap podría editar AndroidManifest.xml, o la clase DroidGap podría administrar/prevenir la rotación. –

+1

@apanosa: esta solución se refiere a la construcción del teléfono. Confirmo que funciona en ios 7.xy Android 2.x en este momento con phonegap 3.4.0. – cherouvim

1

Quizás importante mencionar porque yo no lo sabía:

Si usted utiliza el convertidor de apk phonegap en línea con hidratación habilitado a su aplicación, tendrá que reconstruye tu aplicación completamente en lugar de solo actualizarla. ¡Esto también te ayudará con preferencias como "orientación" o "pantalla completa"!

Cuestiones relacionadas