使用按钮以编程方式更改屏幕方向

Sam*_*Sam 91 android screen-orientation android-button

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

Har*_*ran 201

是的它是可实施的!

ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Run Code Online (Sandbox Code Playgroud)

ActivityInfo.SCREEN_ORIENTATION_PORTRAIT

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Run Code Online (Sandbox Code Playgroud)

ActivityInfo

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

});
Run Code Online (Sandbox Code Playgroud)

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

  • 感谢您的回答。但这会将应用程序锁定在该模式下。当用户旋转设备时,屏幕不旋转。 (3认同)
  • 如果我以编程方式将方向设置为横向作为此答案,则用户将无法再通过旋转设备来更改方向。有什么办法可以处理这个问题吗?我想做这个答案中所教的,但是当用户旋转设备时,它会不断改变方向。 (2认同)

Phi*_*oda 35

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

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Run Code Online (Sandbox Code Playgroud)

分别用于横向和纵向模式.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;                   
               }
          }
   });
Run Code Online (Sandbox Code Playgroud)

摘自此处:http://techblogon.com/android-screen-orientation-change-rotation-example/

编辑

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

Activity.getResources().getConfiguration().orientation
Run Code Online (Sandbox Code Playgroud)

  • 我建议使用`getRequestedOrientation()`来获取当前的屏幕方向:http://stackoverflow.com/a/21909327/1037294 (3认同)

小智 21

如果可能,请不要使用SCREEN_ORIENTATION_LANDSCAPE或SCREEN_ORIENTATION_PORTRAIT.而是使用:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
Run Code Online (Sandbox Code Playgroud)

这些允许用户将设备分别定向到横向或纵向.如果你曾经不得不用充电线进入你的肚子来玩游戏,那么你就知道为什么同时拥有两个方向对用户来说很重要.

注意:对于手机,至少有几个我已经检查过,它只允许"正面朝上"的纵向模式,但是,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);
Run Code Online (Sandbox Code Playgroud)


Sat*_*hya 19

使用此选项设置屏幕的方向:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Run Code Online (Sandbox Code Playgroud)

要么

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Run Code Online (Sandbox Code Playgroud)

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

android:configChanges = "orientation"
Run Code Online (Sandbox Code Playgroud)

  • 你需要两个`"orientation | screenSize"`,请看这里:https://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange (2认同)

Liy*_*iya 7

工作代码:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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