Android 如何防止设备旋转时布局发生任何变化?

Android 如何防止设备旋转时布局发生任何变化?,android,layout,orientation,Android,Layout,Orientation,我想我的问题看起来和很多老问题很相似,但却不一样 我希望应用程序在运行时旋转设备时不要更改布局方向。 这: …不起作用。我不想有固定方向的应用程序。我只想防止它在应用程序运行时发生更改 这: …不起作用。设置后,应用程序不会重新启动,布局不会更改为其他布局,但当前布局会根据新设备方向旋转和拉伸 我想要实现的就是在活动开始时根据方向选择合适的布局,之后保持相同的布局和布局方向,直到应用程序完成 有人知道如何轻松地做到这一点吗?使用此代码将应用程序限制在同一方向,直到应用程序完成,调用createI

我想我的问题看起来和很多老问题很相似,但却不一样

我希望应用程序在运行时旋转设备时不要更改布局方向。 这:

…不起作用。我不想有固定方向的应用程序。我只想防止它在应用程序运行时发生更改

这:

…不起作用。设置后,应用程序不会重新启动,布局不会更改为其他布局,但当前布局会根据新设备方向旋转和拉伸

我想要实现的就是在活动开始时根据方向选择合适的布局,之后保持相同的布局和布局方向,直到应用程序完成


有人知道如何轻松地做到这一点吗?

使用此代码将应用程序限制在同一方向,直到应用程序完成,调用createInstance后使用此代码,然后在相应的资源文件夹中使用适当的布局,用于纵向分辨率/布局和横向分辨率/布局

 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);
    }

Android系统通过销毁和重新创建活动自动为您处理旋转。Andrdoid称之为“配置更改”,有几种情况可能发生(请参阅)

这不是您想要的,因此您可以在
AndroidManifest.xml
中指出要手动处理的配置更改类型:

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


然后,您可能希望覆盖
活动。OnConfiguration Changed(Configuration)
以根据需要处理配置更改。

解决方案是在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\u orientation\uuxxxxx)

试试:

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);
    }});
}
}
/* 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();
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);
    }});
}
}