Как предотвратить изменение макета при повороте устройства?

1

Я думаю, у меня есть вопрос, похожий на многие старые вопросы, но это не одно и то же.

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

android:screenOrientation = "portrait"

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

Эта:

android:configChanges="orientation"

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

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

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

Теги:
layout
orientation

4 ответа

1
Лучший ответ

Используйте этот код, чтобы ограничить ваше приложение той же ориентацией до тех пор, пока приложение не закончится, используйте этот код после вызова 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
    Отлично. Спасибо Большое!
0

попробуй:

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

Решение состоит в том, чтобы узнать ориентацию экрана в 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

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню