【问题标题】:Change Screen Orientation programmatically using a Button使用按钮以编程方式更改屏幕方向
【发布时间】:2013-08-18 13:25:20
【问题描述】:

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

【问题讨论】:

标签: android android-button screen-orientation


【解决方案1】:

是的,它是可以实现的!

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

【讨论】:

  • 谢谢。但是这个功能需要在有根设备上运行吗?它似乎无法在我的手机上运行,​​但在我的 root 平板电脑上运行。
  • 不,不是这样的。实际上我在发布之前测试了该链接中的代码。它在我的设备上工作。
  • 好的,是的,你是对的。我刚刚测试了另一台设备,它运行良好。好吧,我的三星 Galaxy Nexus 不工作。不知道为什么。
  • 感谢您的回答。但这会将应用程序锁定在该模式下。当用户旋转设备时,屏幕不会旋转。
  • 如果我以编程方式将方向设置为横向作为此答案,则用户无法再通过旋转设备来更改方向。有什么办法可以处理这个问题?我想做这个答案中教导的事情,但是当用户旋转设备时,它会不断改变方向。
【解决方案2】:

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

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

【讨论】:

  • 我建议使用getRequestedOrientation() 来获取当前屏幕方向:stackoverflow.com/a/21909327/1037294
  • getRequestedOrientation() 在您启动应用程序时为您提供UNSPECIFIED。所以使用上面的监听器它不会改变屏幕,如果你将UNSPECIFIED 添加到switch 它应该首先将屏幕放在 Portrait / Landscape 位置之一。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    

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

    android:configChanges = "orientation"
    

    【讨论】:

    【解决方案5】:

    工作代码:

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

    在你的按钮点击中调用这个方法

    【讨论】:

      【解决方案6】:

      是的 ، Hariharan 答案工作正常。但是您应该在活动标签中将以下行添加到 AndroidManifest.xml :

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

      如果不添加以上行,Hariharan 回答无效。

      谢谢Benny

      【讨论】:

        【解决方案7】:

        我的合作伙伴:

        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);无法在我的设备上运行

        【讨论】:

          猜你喜欢
          • 2018-10-27
          • 2015-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-31
          • 2012-05-31
          相关资源
          最近更新 更多