Java 仅在横向模式下强制旋转屏幕

Java 仅在横向模式下强制旋转屏幕,java,android,Java,Android,在我的活动中我有一个按钮,如果我点击该按钮,我会将屏幕旋转到横向模式,但它只在横向模式下出现。如何启用纵向模式?我使用下面的代码进行力旋转 rotate.setOnClickListener(new Button.OnClickListener(){ @Override public void onClick(View v) { this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDS

在我的
活动中
我有一个按钮,如果我点击该按钮,我会将屏幕旋转到横向模式,但它只在横向模式下出现。如何启用纵向模式?我使用下面的代码进行力旋转

   rotate.setOnClickListener(new Button.OnClickListener(){

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

});

上面的代码覆盖了本机旋转功能,有人能建议我如何启用本机旋转功能吗?

通过编程,您可以使用此代码来实现

potraitButton.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View v) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
   }

});

buttonLandscape.setOnClickListener(new Button.OnClickListener(){

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

});
如果要自动旋转屏幕:

SensorManager sensorManager = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);
        sensorManager.registerListener(new SensorEventListener() {
            int orientation=-1;;

            @Override
            public void onSensorChanged(SensorEvent event) {
                if (event.values[1]<6.5 && event.values[1]>-6.5) {
                    if (orientation!=1) {
                        Log.d("Sensor", "Landscape");
                    }
                    orientation=1;
                } else {
                    if (orientation!=0) {
                        Log.d("Sensor", "Portrait");
                    }
                    orientation=0;
                }
            }

            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {


            }
        }, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME);
SensorManager SensorManager=(SensorManager)this.getSystemService(Context.SENSOR\u SERVICE);
sensorManager.registerListener(新的SensorEventListener(){
int方向=-1;;
@凌驾
传感器更改时的公共无效(传感器事件){
if(事件值[1]-6.5){
如果(方向!=1){
Log.d(“传感器”、“景观”);
}
方向=1;
}否则{
如果(方向!=0){
Log.d(“传感器”、“纵向”);
}
方向=0;
}
}
@凌驾
精度更改时的公共无效(传感器,int精度){
}
},sensorManager.getDefaultSensor(Sensor.TYPE\u加速计),sensorManager.Sensor\u DELAY\u游戏);

基本上你有两个选择

首先,您可以在任何时候手动切换回纵向,使用:
setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u Grait)

另一种方法是覆盖
onConfigurationChanged()
(查看文档)。 例如:


您可以通过两种方式实现您的目标,这取决于您何时返回到纵向。

创建一个全局变量作为

boolean landscape = false; 
然后在点击按钮的同时

rotate.setOnClickListener(new Button.OnClickListener(){

@Override
public void onClick(View v) {
 if(!landscape){
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
 landscape = true;
 }else{
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
 landscape = false;
 }
}});
因此,如果您再次单击按钮,它将再次切换到纵向模式。

   this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
覆盖您在AndroidManifest中为该活动定义的方向,例如:

android:screenOrientation="sensor"
要恢复自动方向更改,您需要重置方向:

 this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

查看我自己的问题:

我很抱歉,我不会这样标记。如果你设置该标志,你将强制它为横向,因此,如果手机旋转,就不会切换回纵向。哦,好吧,我如何实现这两个功能?如果手动更改方向,你也必须手动撤消它。看看doc(),它不是处理屏幕旋转的正确方法。请看一下android doc(),在我的例子中,我有一个用于横向旋转的按钮点击,然后,如果用户将设备旋转到纵向或横向,那么它应该在两个方向上工作。因此,当用户更改旋转并更新计数值时,必须使静态变量或任何计数和改变该值。在强制旋转后,没有方向方法调用。在这种情况下,如何获取计数?当用户按下按钮,您必须更改计数值,然后用户再次按下按钮,您必须检查计数值,每次单击时您必须检查计数值,根据计数值,更改方向。调用此设置后,请求方向(ActivityInfo.SCREEN\u orientation\u Grait);onConfigurationChanged不起作用,即使我旋转设备,请使用新代码更新您的问题,并指定您所在的位置(活动、片段等)。旋转智能手机后会调用onConfigurationChanged()。我没有任何纵向按钮单击。当用户将设备旋转到纵向模式时,应该会发生这种情况。我想你误解了我的场景,我只在强制横向模式下单击按钮,而不是在纵向模式下单击按钮。我使用相同的按钮用于这两种目的。如果再次单击,它将返回到肖像模式,但目标不是返回到肖像模式?重新激活设置RequestedOrientation破坏的自动屏幕方向。
 this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);