0

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

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

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

我知道这可能不是最好的方法,但我觉得它可以快速解决我的问题,并且不会导致任何其他问题(据我所知)。

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

我将如何以编程方式执行此操作?

像这样: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

我会在哪里做呢?在onCreate()对话框中?还是在我从活动中调用对话框之前?

4

2 回答 2

0

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

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

我认为,如果这不起作用接近。不管怎样,你应该看看 这个

我希望这能帮到您!

于 2014-05-19T11:19:19.307 回答
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);
    }
}  

我希望这可以帮助别人。

于 2018-03-27T19:51:52.187 回答