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

时间:2019-02-26 18:40:54

标签: java android

在我的Activity中,如果有单击按钮,则会将屏幕旋转到横向模式,但是只有横向模式会停滞。如何启用人像模式?我正在使用以下代码进行强制旋转。

   rotate.setOnClickListener(new Button.OnClickListener(){

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

});

以上代码覆盖了原生旋转功能,请问有人可以建议我如何启用原生旋转功能?

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

基本上,您有两个选择。

首先,您可以使用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

随时随时切换回纵向。

另一种方法是覆盖onConfigurationChanged()(看一下文档here)。 示例:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if(changedOrientationManually && 
         newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        //Logic (maybe setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);)
    }
}

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

答案 2 :(得分:0)

创建一个全局变量为

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

因此,如果再次单击该按钮,它将再次切换到纵向模式。

答案 3 :(得分:0)

以我的理解

   this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

会覆盖您在AndroidManifest中为该活动定义的方向,例如:

android:screenOrientation="sensor"

要恢复自动方向更改,您需要重置方向:

 this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

看到我自己的问题:Switch activiy on orientation changed?