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

时间:2011-12-16 12:37:06

标签: android layout orientation

我认为我的问题与许多旧问题看起来相似,但不一样。

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

android:screenOrientation = "portrait"

......没有做到这一点。我不想要有固定方向的应用程序。我想在应用程序运行时防止它发生变化。

此:

android:configChanges="orientation"

......没有做到这一点。设置后,应用程序不会重新启动,布局不会更改为另一个,但会根据新的设备方向旋转和拉伸当前布局。

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

有人知道如何轻松完成这项工作吗?

4 个答案:

答案 0 :(得分:1)

使用此代码将应用程序限制在相同的方向,直到应用程序完成,在调用createInstance后使用此代码,然后在相应的资源文件夹中使用适当的布局,用于纵向res /布局和横向使用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);
    }

答案 1 :(得分:0)

Android系统会通过销毁和重新创建活动来自动处理轮换。 Andrdoid将此称为“配置更改”,可能会出现几种情况(请参阅http://developer.android.com/reference/android/R.attr.html#configChanges)。

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

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

然后,您可能希望覆盖Activity.onConfigurationChanged(Configuration)以根据需要处理配置更改。

答案 2 :(得分: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)

答案 3 :(得分: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);
    }});
}
}