在Android上禁用运行时的屏幕旋转

时间:2011-04-06 09:30:03

标签: android

public class testScreenRotation extends Activity {
/** Called when the activity is first created. */

private int mRuntimeOrientation;
   private boolean mDisableScreenRotation=true;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mRuntimeOrientation = this.getScreenOrientation();
    setContentView(R.layout.main);


}
protected int getScreenOrientation() {
/*
    Display display = getWindowManager().getDefaultDisplay();
    int orientation = display.getOrientation();

    if (orientation == Configuration.ORIENTATION_UNDEFINED) {
       orientation = getResources().getConfiguration().orientation;

       if (orientation == Configuration.ORIENTATION_UNDEFINED) {
          if (display.getWidth() == display.getHeight())
             orientation = Configuration.ORIENTATION_SQUARE;
          else if(display.getWidth() < display.getHeight())

             orientation = Configuration.ORIENTATION_PORTRAIT;
          else
             orientation = Configuration.ORIENTATION_LANDSCAPE;
          }
       }


    return orientation;
  */
    return Configuration.ORIENTATION_PORTRAIT;
 }
@Override
public void onConfigurationChanged(Configuration newConfig) {
    // TODO Auto-generated method stub
       if (mDisableScreenRotation) {
             super.onConfigurationChanged(newConfig);
             this.setRequestedOrientation(mRuntimeOrientation);
          } else {
             mRuntimeOrientation = this.getScreenOrientation();
             super.onConfigurationChanged(newConfig);
          }
       }

}

我的应用程序如上,并在xml中添加android:configChanges =“orientation”。当我的应用程序启动我的屏幕是PORTRAIT,我按ctrl + F12,屏幕也是roate,屏幕是LANDSCAPE,第二个我按ctrl + F12,屏幕也是roate,屏幕是PORTRAIT,然后按ctrl + F12,屏幕保持PORTRAIT。所以我再次按,屏幕保持肖像。我的问题是,当应用程序启动时,为什么我的屏幕不能保持PORTRAIT。

编辑:我想用代码来控制屏幕旋转,如果我能做到这一点?

5 个答案:

答案 0 :(得分:15)

如果您试图让您的应用程序始终处于纵向模式,您可以将此行添加到清单中的元素

android:screenOrientation="portrait"

在AndroidManifest.xml文件的每个活动中添加此行。

答案 1 :(得分:7)

我相信您要寻找的方法是Activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_<PORTRAIT/LANDSCAPE>)

这与

一起

android:configChanges="orientation"

对于清单中的那个活动告诉系统你将自己处理方向应该禁用自动重定向。

答案 2 :(得分:4)

更改AndroidManifest.xml文件。太多了。

<activity android:name="Activity_Name" android:screenOrientation="portrait"/>

现在您的应用不会更改方向。

答案 3 :(得分:3)

http://androidbiancheng.blogspot.com/2010/10/java-setrequestedorientation.html,此链接解决了我的问题,setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);并且不需要在xml.so中添加行android:configChanges =“orientation”我认为我无法使用Configuration来获取屏幕方向,应该使用ActivityInfo。

答案 4 :(得分:0)

您也可以在java源代码中禁用运行时的屏幕旋转 试试这种方式

private void setAutoRotation(final boolean autorotate) {
        AsyncTask.execute(new Runnable() {
            public void run() {
                try {
                    IWindowManager wm = IWindowManager.Stub.asInterface(ServiceManager.getService(Context.WINDOW_SERVICE));
                    if (autorotate) {
                        wm.thawRotation();
                    } else {
                        wm.freezeRotation(-1);
                    }
                } catch (RemoteException exc) {
                    Log.secW(TAG, "Unable to save auto-rotate setting");
                }
            }
        });
    }

现在尝试在应用程序运行时调用此方法。可能是某些方法或某些按钮。

setAutoRotation(false);

setAutoRotation(true);