Tengo un simple hola mundo Android de proyecto de pruebas. En mi AndroidManifest.xml yo ya establecido

android:screenOrientation="portrait" 
android:configChanges="keyboardHidden|keyboard|orientation">

pero cuando me depurar mi código, la variable isLandscape es Cierto cuando se supone que debe ser Falsa

boolean isLandscape = getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;

Sé que se puede también establecer la actividad de orientación por el código, pero tengo que ponerlo en xml por algunas razones. ¿Cómo puedo hacerlo?

Edit: mi AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.androidgames.mreater"
android:versionCode="1"
android:versionName="1.0" 
android:installLocation="preferExternal">

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<application
    android:icon="@drawable/ic_launcher"
    android:allowBackup="true"
    android:label="Mr. Eater" >
    <activity
        android:name="com.androidgames.mreater.MrEaterGame"
        android:label="Mr. Eater" 
        android:screenOrientation="portrait"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

mi real onCreate de la actividad método:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    boolean isLandscape = getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);

    int frameBufferWidth = isLandscape ? 480 : 320;
    int frameBufferHeight = isLandscape ? 320 : 480;
   Bitmap frameBuffer = Bitmap.createBitmap(frameBufferWidth,
            frameBufferHeight, Config.RGB_565);

    float scaleX = (float) frameBufferWidth
            /getWindowManager().getDefaultDisplay().getWidth();
    float scaleY = (float) frameBufferHeight
            /getWindowManager().getDefaultDisplay().getHeight();

    renderView = new AndroidFastRenderView(this, frameBuffer);
    graphics = new AndroidGraphics(getAssets(), frameBuffer);
    fileIO = new AndroidFileIO(getAssets());
    audio = new AndroidAudio(this);
    input = new AndroidInput(this, renderView, scaleX, scaleY);
    screen = this.getStartScreen();
   setContentView(renderView);

    PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "GLGame");
}

Ahora es cada vez más raro, el isLandscape variable es Cierto, pero a veces es Falso. Es de alguna manera como un error.

¿La orientación de la pantalla cambia realmente o simplemente que la variable está volviendo a la realidad?
Se están estableciendo en la actividad de la etiqueta de la derecha? No ponerlo en la aplicación de la etiqueta? developer.android.com/guide/topics/manifest/…
la Actividad de la pantalla en horizontal, no en vertical como yo quiero.
sí. Me puse en la actividad de la etiqueta.
raro. Yo, literalmente, intentado esto y no puede duplicar el problema. Este problema en todos los dispositivos/emuladores?

OriginalEl autor Cuồn Yết | 2013-06-26

2 Comentarios

  1. 10

    Asegúrese de colocarlo en el <activity> etiqueta, no la <application> etiqueta.

    Sólo funciona en el <activity> etiqueta, pero no se quejan si la pones en el <application> etiqueta.

    http://developer.android.com/guide/topics/manifest/application-element.html

    vs

    http://developer.android.com/guide/topics/manifest/activity-element.html

    Usted tendrá que poner en cada Activity se define en el manifest.xml

    gracias Ken Lobo, pero lo puse en la etiqueta de actividad, no de la aplicación de la etiqueta.
    No sé qué es, entonces, todo parece estar bien de lo que usted ha descrito. Tal vez editar tu post y añadir su manifest.xml? Necesitamos más pistas 🙂
    usted debe declarar screeSize demasiado si su objetivo declarado de la API es de 13 o superior.
    Una cosa más que he pensado (long shot) – asegúrese de que no hay algún otro error que impide la construcción y que en realidad se está probando la última versión de su app. Hacer un pequeño cambio a una cadena o algo y ver si se obtiene a través de.
    He editado un archivo xml y el método onCreate.

    OriginalEl autor Ken Wolf

  2. 1

    Todo parece estar bien, excepto una cosa! No sé si es tu caso o no, pero usted debe leer la documentación 😀

    Usted tendrá que declarar screeSize si las aplicaciones de los objetivos de la API de nivel 13 o superior.

    Si su aplicación se destina a la API de nivel 13 o superior (según lo declarado por la
    minSdkVersion y targetSdkVersion atributos), entonces usted debe también
    declarar la «screenSize de configuración», porque también cambia cuando un
    dispositivo cambia entre la orientación vertical y horizontal.

    Déjame saber que así se resuelve el problema.

    gracias yugidroid. mis aplicaciones de los objetivos a nivel de API es de 17. He añadido el «screenSize» de configuración, pero no funciona. la actividad sigue en el paisaje.

    OriginalEl autor yugidroid

Dejar respuesta

Please enter your comment!
Please enter your name here