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


Answers:


216

是的,它是可以实现的!

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


谢谢。但是,此功能是否需要在有根设备上运行?它似乎不能在我的手机上使用,但可以在我扎根的平板电脑上使用。
山姆

不,它不是这样的..其实我测试的代码发布前的链接..它在我的设备工作..
哈里哈兰

好的,是的,你是对的。我刚刚测试了另一台设备,效果很好。好吧,我的三星Galaxy Nexus无法正常工作。不知道为什么。
山姆

4
感谢你的回答。但这会将应用程序锁定在该模式下。当用户旋转设备时,屏幕不旋转。
Eco4ndly

2
如果我通过编程将方向设置为横向,则用户将无法再通过旋转设备来更改方向。有什么办法解决这个问题?我想按照此答案中的说明进行操作,但是当用户旋转设备时,它将不断更改方向。
很快桑托斯

36

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

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

3
我建议使用getRequestedOrientation()来获得当前的屏幕方向:stackoverflow.com/a/21909327/1037294
a.ch.

getRequestedOrientation()UNSPECIFIED启动应用程序时会给您。因此,使用上述侦听器时,它不会更改屏幕,如果添加UNSPECIFIED到其中switch,则应首先将屏幕置于人像/风景位置之一。
mortalis 18/09/25

22

尽可能不要使用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);

19

使用此设置屏幕的方向:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

要么

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

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

android:configChanges = "orientation"

2
两者都需要"orientation|screenSize",请看这里:developer.android.com/guide/topics/resources/…–
Benny

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.