Как предотвратить изменение макета при повороте устройства? - PullRequest
2 голосов
/ 16 декабря 2011

Мне кажется, у меня есть вопрос, который похож на многие старые вопросы, но не тот.

Я бы хотел, чтобы приложение не меняло ориентацию макета, когда устройство поворачивается во время работы приложения.Это:

android:screenOrientation = "portrait"

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

Это:

android:configChanges="orientation"

... НЕ справляется.Когда установлено, приложение не перезапускается, макет не меняется на другой, но текущий макет поворачивается и растягивается в соответствии с новой ориентацией устройства.

Все, чего я хотел бы добиться, - это выбрать правильный макет в соответствии с ориентацией, когда активностьзапускается и после этого остается тем же макетом и той же ориентацией макета, пока приложение не завершится.

Кто-нибудь знает, как это легко сделать?

Ответы [ 4 ]

1 голос
/ 16 декабря 2011

Используйте этот код, чтобы ограничить ваше приложение в той же ориентации, пока приложение не будет завершено, используйте этот код после вызова createInstance, затем используйте соответствующий макет в соответствующей папке ресурсов, для портретного res / layout и для альбомного использования res / layout-land..

 Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();

    int orientation = display.getOrientation();

    if(orientation == Configuration.ORIENTATION_PORTRAIT){

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }

    if(orientation == Configuration.ORIENTATION_LANDSCAPE){
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    }
0 голосов
/ 16 декабря 2011

попробуйте:

package com.exercise.AndroidOrientation;

import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class AndroidOrientationActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button buttonSetPortrait = (Button)findViewById(R.id.setPortrait);
    Button buttonSetLandscape = (Button)findViewById(R.id.setLandscape);

    buttonSetPortrait.setOnClickListener(new Button.OnClickListener(){

@Override
public void onClick(View arg0) {
      // TODO Auto-generated method stub
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}});

    buttonSetLandscape.setOnClickListener(new Button.OnClickListener(){

@Override
public void onClick(View arg0) {
        // TODO Auto-generated method stub
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    }});
}
}
0 голосов
/ 16 декабря 2011

Решение состоит в том, чтобы выяснить ориентацию экрана в onCreate (), а затем установить эту ориентацию:

/* First, get the Display from the WindowManager */
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();

/* Now we can retrieve all display-related infos */
int width = display.getWidth();
int height = display.getHeight();
int orientation = display.getOrientation();

, а затем установить соответствующую ориентацию: setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_XXXXX)

0 голосов
/ 16 декабря 2011

Система Android обрабатывает вращения автоматически для вас, уничтожая и воссоздавая действие. Andrdoid называет это «изменением конфигурации», может произойти несколько изменений (см. http://developer.android.com/reference/android/R.attr.html#configChanges).

Это не то, что вам нужно, поэтому вы можете указать тип изменений конфигурации, которые вы хотите обработать вручную, в AndroidManifest.xml:

<Activity ... android:configChanges="orientation" />

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

...