ориентация не работает в 2.3.3? - PullRequest
3 голосов
/ 05 марта 2012

Я подготовил одно приложение. Мое приложение будет поддерживать как альбомную, так и портретную ориентацию. Когда я меняю ориентацию с портретной на альбомную, она работает нормально, но когда я меняю альбомную ориентацию на портретную, она не работает. Мой код:

  public void onConfigurationChanged(Configuration newConfig) {

        super.onConfigurationChanged(newConfig);
        System.out.println("orientation---"+getResources().getConfiguration().orientation);
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            setContentView(R.layout.main);
            System.out.println("landscape-----");
        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            setContentView(R.layout.main);
            System.out.println("portrait-----");
        }

    }

Каждый раз, когда требуется только ландшафтный режим. Я допустил ошибку, где-то. пожалуйста, помогите.

System.out.println("orientation---"+getResources().getConfiguration().orientation);

Вышеуказанная СОП печатает 2 означает пейзаж. Пожалуйста, помогите мне. (Я использую 2.3.3)

Ответы [ 3 ]

2 голосов
/ 05 марта 2012

Проблема связана с android:configChanges="orientation|keyboardHidden".

, если вы удалите |keyboardHidden из файла androidmanifest.xml, тогда onConfigurationChanged запускается только при повороте из пейзажа в портрет, а не при переходе из портретав ландшафт (по крайней мере, в эмуляторе по умолчанию).

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ: DID какой-то пример программы, чтобы проверить его и работает нормально для меня.

CheckOrientationActivity.java

import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

public class CheckOrientationActivity extends Activity {


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_layout);
        Log.i("DayElevenActivity", "onCreate Start");
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        Log.i("DayElevenActivity", "onConfigurationChanged");
        // Checks the orientation of the screen
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            Log.i("ORIENTATION_LANDSCAPE", "ORIENTATION_LANDSCAPE");
            Toast.makeText(getBaseContext(), "ORIENTATION_LANDSCAPE", Toast.LENGTH_SHORT).show();
        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            Log.i("ORIENTATION_PORTRAIT", "ORIENTATION_PORTRAIT");
            Toast.makeText(getBaseContext(), "ORIENTATION_PORTRAIT", Toast.LENGTH_SHORT).show();
        }
    }

}

In AndroidManifest.xml

<activity
            android:label="@string/app_name"   
            android:configChanges="**orientation|keyboardHidden**"    
            android:name=".CheckOrientationActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

Соответствующие журналы при запуске и изменении ориентации

03-05 18:54:31.644: I/CheckOrientationActivity (20314): onCreate Start
03-05 18:54:35.014: I/CheckOrientationActivity (20314): onConfigurationChanged
03-05 18:54:35.014: I/ORIENTATION_LANDSCAPE(20314): ORIENTATION_LANDSCAPE
03-05 18:54:41.984: I/CheckOrientationActivity (20314): onConfigurationChanged
03-05 18:54:41.984: I/ORIENTATION_PORTRAIT(20314): ORIENTATION_PORTRAIT
2 голосов
/ 05 марта 2012

Возможно, вы столкнулись с этой ошибкой "Ориентация не изменяется с эмулятора на альбомную на 2,3"

Более 45 человек сталкиваются с той же проблемой с эмулятором Android 2.3 *

http://code.google.com/p/android/issues/detail?id=13189

ОС хоста: версия инструментов Windows 7 SDK: версия 8 Eclipse: 3.5 Версия плагина ADT: 8.0.1 Платформа, на которую ориентирован ваш проект: 2.3 Версия платформы, работающей в эмуляторе: 2.3

ШАГИ ДЛЯ ВОСПРОИЗВОДСТВА: 1. Занятие 1 (без ориентации экрана) - Занятие 2 (ориентация экрана = ландшафт)

  1. Переход от действия 1 к 2 работает нормально. Нажатие назад меняет ориентацию упражнения 1 на ландшафт

ОЖИДАЕМЫЕ РЕЗУЛЬТАТЫ: Задание 1 должно быть в портретном режиме

НАБЛЮДЕННЫЕ РЕЗУЛЬТАТЫ: Поведение наблюдается только у пряников, работает как ожидается на фройо.

1 голос
/ 05 марта 2012

Существует множество причин, по которым это может произойти, трудно сказать, не видя больше кода.

Вот несколько указателей:

  • вы не заставили расположение некоторыхопределенная ориентация с помощью файла манифеста или программно (что-то вроде <activity android:screenOrientation="portrait"> в вашем манифесте)

  • по умолчанию действие перезапускается при изменении конфигурации.Если вы не хотите, чтобы ваша активность перезапускалась при изменении ориентации, вам необходимо использовать

    android: configChanges = "direction"

в конфигурации вашей активности в манифесте.

  • вышеупомянутый пункт фактически заставит Android вызывать метод onConfigurationChanged(Configuration) вашей активности при изменении ориентации

== update ==

ТакжеЕсли у вас одинаковый макет (например, «основной»), объявленный в layout-land и layout-port, вам нужно только указать, что вы хотите использовать этот макет в начале:

 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

и все,НЕ НУЖНО также реализовывать метод

public void onConfigurationChanged(Configuration newConfig) {
  //...
}

.Для выбора правильного макета на основе ориентации все, что вам нужно сделать, это объявить один и тот же макет в этих двух папках.

(Кроме того, НЕ НУЖНО добавлять android:configChanges="orientation" в манифест, по-видимому, он включен по умолчанию).Я попробовал все это только сейчас, работает нормально

...