【问题标题】:Manually confirm for orientation change手动确认方向更改
【发布时间】:2015-03-03 12:21:37
【问题描述】:

下面是我的活动,我需要以不同方式处理方向变化,基本上每当 onConfigurationChanged() 事件因设备方向变化而触发时,我都会显示一个对话框窗口并询问用户他是否要根据用户操作更新方向我更新为横向/纵向或保持相同的方向。

public class MyActivity extends Activity {
..
..
private boolean mFlagConfigChangeManual = false;

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        Log.e("onConfigurationChanged", "mFlagConfigChangeManual="+mFlagConfigChangeManual);

        super.onConfigurationChanged(newConfig);

        int orient = -1;
        if (!mFlagConfigChangeManual) {

            if (newConfig.orientation == newConfig.ORIENTATION_LANDSCAPE) {
                mFlagConfigChangeManual = true;
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                orient = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;

            } else if (newConfig.orientation == newConfig.ORIENTATION_PORTRAIT) {
                mFlagConfigChangeManual = true;
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                orient = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;

            }

        } else {
            mFlagConfigChangeManual = false;
            return;
        }

        final int orient2 = orient;
        DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                switch (which) {
                case DialogInterface.BUTTON_POSITIVE:
                    if (orient2 >= 0) {
                        mFlagConfigChangeManual = true;
                        setRequestedOrientation(orient2);
                    }
                    break;

                case DialogInterface.BUTTON_NEGATIVE:
                    break;
                }
            }
        };

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("Would you like to update orientation?")
                .setPositiveButton("Yes", dialogClickListener)
                .setNegativeButton("No", dialogClickListener).show();

}

我已经在清单文件中进行了必要的更改,但我遇到了两个问题,第一次显示方向确认对话框它可以工作,但是当我再次重新定向时,它什么也没做,基本上 onConfigurationChanged() 不会再次调用.我注意到的另一个问题是;

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);方法在横向模式下将视图倒置。这可以做得更好吗?

【问题讨论】:

    标签: android


    【解决方案1】:

    对于第一个问题,onConfigurationChanged 方法在第一次更改后不会被调用,因为当你手动强制一个方向时 触发 onConfigurationChanged 方法的监听被禁用,这是为了保持新的方向,例如,如果设备是纵向的并且你强制横向 如果再次触发监听会发生什么? newConfig.orientation Portrait 的值将再次为,因为这将是设备的实际方向。

    解决第一个问题并不是那么简单,因为我们需要通过OrientationEventListener来操作方向,并检查旋转设备的度数。

    看这里! manually-confirm-for-orientation-change

    对于第二个问题,您只需更改setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

    通过这个setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);

    已编辑:

    要重新启用传感器,您需要调用setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_SENSOR);

    【讨论】:

    • @AbhishekK ,要重新启用传感器,您需要调用 setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_SENSOR);
    • 是的,这非常有效.. 谢谢。您可以在回答中包含此详细信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    相关资源
    最近更新 更多