防止布局更改并仍然捕获onConfigurationChanged

时间:2017-04-27 08:23:10

标签: android orientation

我需要锁定片段的布局,以防止它在设备旋转到横向时旋转。

为此,我将其锁定在清单中:

android:screenOrientation="portrait

布局没有改变,但是当改变方向时我还需要做一些工作(旋转按钮)。以这种方式锁定它可以防止调用onConfigurationChanged。

我瞄准的行为与默认的相机应用程序完全相同。旋转设备时,布局保持不变,但只有按钮旋转。

有没有人可以做到这一点?

2 个答案:

答案 0 :(得分:1)

如果您想以编程方式监听简单的屏幕方向更改并让应用程序对它们做出反应,您可以使用the OrientationEventListener类在您的Activity中执行此操作。

在您的Activity中实现方向事件处理很简单。只需实例化OrientationEventListener并提供其实现。例如,以下名为SimpleOrientationActivity的Activity类将方向信息记录到LogCat:

public class SimpleOrientationActivity extends Activity {
    OrientationEventListener mOrientationListener;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mOrientationListener = new OrientationEventListener(this,
            SensorManager.SENSOR_DELAY_NORMAL) {

            @Override
            public void onOrientationChanged(int orientation) {
                Log.v(DEBUG_TAG,
                    "Orientation changed to " + orientation);
            }
        };

       if (mOrientationListener.canDetectOrientation() == true) {
           Log.v(DEBUG_TAG, "Can detect orientation");
           mOrientationListener.enable();
       }
       else {
           Log.v(DEBUG_TAG, "Cannot detect orientation");
           mOrientationListener.disable();
       }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mOrientationListener.disable();
    }
}

如需更多帮助,请参阅this

this answer也会有所帮助。

答案 1 :(得分:0)

您可以通过编程方式设置方向:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);

使用以下方法检测代码中的方向更改:

 @Override
 public void onConfigurationChanged(Configuration newConfig) {
     super.onConfigurationChanged(newConfig);
     // Do something here...
 }