Тост не отображается при изменении ориентации, почему ..? - PullRequest
0 голосов
/ 07 ноября 2011

Я показываю два разных макета в разных ориентациях.

В обоих я провожу сообщение о том, что ориентация изменилась.

Оно отображается в тосте на портрете, а не в ландшафте, почему ..?

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
        System.out.println("Initial Oriatation is "+display.getOrientation());
        int oriatation = display.getOrientation();
        if(oriatation == 0){
            Toast.makeText(getApplicationContext(), "Changed", Toast.LENGTH_SHORT)
            .show();
            createPort();
            resumePort();
        }else if(oriatation == 1){
            Toast.makeText(getApplicationContext(), "Changed", Toast.LENGTH_SHORT)
            .show();
            createLand();
            resumeLand();
        }
}

Заранее спасибо ...!

Ответы [ 3 ]

1 голос
/ 07 ноября 2011

Вам необходимо реализовать метод onConfigurationChanged, который будет определять, когда ориентация была изменена.

Чтобы убедиться, что ваша активность вызывает это, вам нужно указать android: configChanges = "direction | screenSize" в манифесте.

Тогда в вашем методе onConfigurationChanged вы можете получить что-то вроде:

 if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
 } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
 }

См. http://developer.android.com/guide/topics/resources/runtime-changes.html для получения дополнительной информации.

0 голосов
/ 07 ноября 2011

Одна странная вещь произошла со мной, когда я впервые запускаю эту программу в android2.3.1 (API-9), я получаю сообщение с тостом «Изменено на Портрет» (я изменил «Изменено» на «Изменено на Портрет»)."и" Изменено на Пейзаж ".) и когда я меняю ориентацию экрана с Портрета на Пейзаж, я получаю" Изменено на Пейзаж ", но когда я снова изменяю ориентацию на Портрет, эмулятор снова произносит сообщение" Изменено на Пейзаж ".И теперь все время отображается «Изменено в ландшафте». Я погуглил проблему и обнаружил, что когда мы меняем ориентацию экранной активности, теряем свое первоначальное состояние и меняем на следующее состояние, поэтому мы должны удерживать начальное состояниена экране, чтобы снова увидеть тост сообщения "Изменен на портрет".Есть один класс SharedPrefferences , который помогает нам поддерживать состояние. Так что попробуйте, надеюсь, это решит вашу проблему.

0 голосов
/ 07 ноября 2011

Согласно doc , Display.getOrientation() не рекомендуется, вместо этого предлагается использовать getRotation(). Однако, глядя на doc для getRotation() возвращаемых значений, я предполагаю, что getOrientation() может возвращать аналогичные результаты, поэтому попробуйте проверить не только 0 и 1, но и 2 и 3 и посмотреть, что произойдет .

изменить вместо else if(oriatation == 1) использовать

else if(oriatation % 2 == 1) // or `else if(oriatation == 1 || oriatation == 3)`
...