在显示对话框时禁用我的活动中的屏幕旋转

时间:2014-05-19 11:11:07

标签: android android-dialog android-dialogfragment android-popupwindow

我有一个对话框片段,在我的应用程序执行任务时显示。

我取消了正在调用的活动onDestroy()方法上执行的任务。

如果用户在显示弹出窗口时旋转,则android会破坏活动,然后重新绘制它。所以我告诉它取消onDestroy()方法中的任务。然后它停止执行任务,弹出窗口停留在那里。因为它通常只在任务完成时被删除。

我知道这可能不是最好的方法,但我认为这将是我的问题的快速解决方案,它不会导致任何其他问题(我知道)。

我想在显示弹出窗口之前禁用我的应用程序的旋转,然后我想在对话框被分析时重新启用它。

我如何以程序化方式执行此操作?

像这样: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

我会在哪里做?在对话框的onCreate()中?或者在我从活动中调用对话框之前?

2 个答案:

答案 0 :(得分:0)

尝试这样做,并告诉你的经验! 就在你调用onDestroy()的实现时使用

onDestroy(){
    OrientationListener foo = new OrientationListener(this.getContext());
    foo.disable();
}

我认为如果这不起作用就近了。无论如何你应该看一看 this

我希望这会对你有所帮助!

答案 1 :(得分:0)

尝试为对话框实现onDismiss和onShow侦听器并处理方向。例如,做这样的事情:

public class MyActivity extends Activity
    implements DialogInterface.OnDismissListener,DialogInterface.OnShowListener{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        AlertDialog alertDialog = new 
        AlertDialog.Builder(MainActivity.this).create();
        alertDialog.setTitle("Alert");
        alertDialog.setMessage("Alert message to be shown");
        alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
        new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        alertDialog.setOnShowListener(this);
        alertDialog.setOnDismissListener(this);
        alertDialog.show();
    }
    @Override
    public void onShow(DialogInterface dialog) {
        final int screenOrientation = ((WindowManager)  getbaseContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getOrientation();
        switch (screenOrientation){
        case Surface.ROTATION_180:
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
            break;
        case Surface.ROTATION_270:
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
            break;
        case Surface.ROTATION_0:
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            break;
        case Surface.ROTATION_90:
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            break;
    }
    }
    @Override
    public void onDismiss(DialogInterface dialog) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
    }
}  

我希望这对某人有所帮助。