111

我认为这是可以实现的,因为屏幕旋转行为可以上升到应用程序级别。

4

7 回答 7

247

是的,它是可执行的!

ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

ActivityInfo.SCREEN_ORIENTATION_PORTRAIT

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

活动信息

http://developer.android.com/reference/android/content/pm/ActivityInfo.html

参考链接:

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) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
   }

});

buttonSetLandscape.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View arg0) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
   }

});

http://android-er.blogspot.in/2011/08/set-screen-orientation-programmatically.html

于 2013-08-16T07:43:54.670 回答
42

是的,您可以随时以编程方式设置屏幕方向:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

分别用于横向和纵向模式。setRequestedOrientation() 方法可用于 Activity 类,因此它可以在您的 Activity 中使用。

这就是您如何获取当前屏幕方向并根据其当前状态进行适当设置的方法:

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
final int orientation = display.getOrientation(); 
 // OR: orientation = getRequestedOrientation(); // inside an Activity

// set the screen orientation on button click
Button btn = (Button) findViewById(R.id.yourbutton);
btn.setOnClickListener(new View.OnClickListener() {
          public void onClick(View v) {

              switch(orientation) {
                   case Configuration.ORIENTATION_PORTRAIT:
                       setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                       break;
                   case Configuration.ORIENTATION_LANDSCAPE:
                       setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                       break;                   
               }
          }
   });

取自这里:http ://techblogon.com/android-screen-orientation-change-rotation-example/

编辑

此外,您可以使用以下命令获取屏幕方向Configuration

Activity.getResources().getConfiguration().orientation
于 2013-08-16T07:52:23.663 回答
23

请尽可能不要使用 SCREEN_ORIENTATION_LANDSCAPE 或 SCREEN_ORIENTATION_PORTRAIT。而是使用:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);

这些允许用户将设备分别定向到横向或纵向。如果您曾经不得不通过将充电电缆插入您的胃部来玩游戏,那么您就会确切地知道为什么两个方向都可用对用户来说很重要。

注意:对于手机,至少有几个我检查过,它只允许“正面朝上”纵向模式,但是,SENSOR_PORTRAIT 在平板电脑上正常工作。

注意:此功能是在 API 级别 9 中引入的,因此如果您必须支持 8 或更低(此时不太可能),请改用:

setRequestedOrientation(Build.VERSION.SDK_INT < 9 ?
                        ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE :
                        ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
setRequestedOrientation(Build.VERSION.SDK_INT < 9 ?
                        ActivityInfo.SCREEN_ORIENTATION_PORTRAIT :
                        ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
于 2015-08-10T17:58:34.403 回答
21

使用它来设置屏幕的方向:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

或者

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

并且不要忘记将其添加到您的清单中:

android:configChanges = "orientation"
于 2013-08-16T09:20:58.783 回答
10

工作代码:

private void changeScreenOrientation() {
    int orientation = yourActivityName.this.getResources().getConfiguration().orientation;
    if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        showMediaDescription();
    } else {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        hideMediaDescription();
    }
    if (Settings.System.getInt(getContentResolver(),
            Settings.System.ACCELEROMETER_ROTATION, 0) == 1) {
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
            }
        }, 4000);
    }
}

在您的按钮单击中调用此方法

于 2018-03-28T10:27:04.563 回答
0

是的 ، Hariharan回答很好。但是您应该在活动标记中将以下行添加到 AndroidManifest.xml :

android:screenOrientation="fullSensor"
android:configChanges="orientation|screenSize"

如果不添加以上行,Hariharan 的回答将不起作用。

谢谢本尼

于 2021-05-30T06:00:27.270 回答
0

我的工作过:

setLandscapeIcon.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            setLandscapeIcon.setVisibility(View.GONE);
            setPortraitIcon.setVisibility(View.VISIBLE);
        }
    });

setPortraitIcon.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
                setLandscapeIcon.setVisibility(View.VISIBLE);
                setPortraitIcon.setVisibility(View.GONE);
            }
        });

在清单中

android:configChanges = "orientation|screenSize"
android:screenOrientation="portrait"

注意:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 没有在我的设备上工作

于 2022-01-24T05:45:54.347 回答