如何保持弹出窗口的方向改变?

时间:2014-05-20 10:52:09

标签: java android layout popup android-linearlayout

我的活动中有一个弹出窗口。

每当我将屏幕方向更改为横向时,弹出窗口就会消失。

为什么会这样,以及如何保持弹出窗口可见?

4 个答案:

答案 0 :(得分:0)

尝试以下代码: -

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
        Log.i("orientation", "Orientation changed to: Landscape");
    else
        Log.i("orientation", "Orientation changed to: Portrait");
}

请参阅以下链接了解更多信息: -

How to keep Popup window opened when orientation changes at run time in Android?

答案 1 :(得分:0)

当方向改变时,活动将重新启动..所以通常弹出窗口再次调用..无论如何,如果它消失,尝试在onCreate中调用它。

或检查方向更改并进行必要的召回。

if(getResources().getConfiguration().orientation == getResources()
                    .getConfiguration().ORIENTATION_LANDSCAPE){
        // put some flag

         }else if(getResources().getConfiguration().orientation != getResources()
                    .getConfiguration().ORIENTATION_PORTRAIT) {
        // change the flag

   }

如果您放置代码片段,我可以帮助您

答案 2 :(得分:0)

您需要使用托管对话框。而不是

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(getString(R.string.rule_edit_choose_action));
builder.setAdapter(new ArrayAdapter(this, R.array.dummyValues), null);
builder.show();

你应该使用像

这样的东西
myActivity.showDialog(0);

然后在Activity中实现onCreateDialog()。然后,您的活动将管理对话框,并在您重新定位并重新关闭时重新显示该对话框。如果您需要在每次显示时更改对话框,请同时实现onPrepareDialog() - 活动将使您在显示对话框之前对其进行访问,以便您可以更新它(例如,使用自定义消息)。 p>

这里有很多信息:

http://developer.android.com/guide/topics/ui/dialogs.html

正如@Ciril所说,你的问题是当你重新定位你的Activity时会重新启动。如果适合您的应用,您可以随时将您的活动方向修改为纵向或横向。这会阻止它重新启动。

答案 3 :(得分:0)

您最有可能使用AlertDialog作为弹出窗口,其中包括:

AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle(R.string.popup_title);
builder.setMessage(R.string.popup_message);
builder.setPositiveButton(R.string.yes, new OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // do something
    }
});
builder.show();

这很糟糕,因为你的Activity不知道有一个弹出对话框,当你改变屏幕方向时,Activity会重新启动新参数,你的弹出窗口就消失了。

要避免这种情况,最好使用ShowDialog()来显示弹出窗口。为了使其有效,您需要覆盖onCreateDialog()

// Called to create a dialog to be shown.
@Override
protected Dialog onCreateDialog(int id, Bundle bundle) {
    switch (id) {
        case NEW_DIALOG :
            return new AlertDialog.Builder(this)
                .setTitle(R.string.popup_title)
                .setMessage(R.string.popup_message)
                .setPositiveButton(android.R.string.ok, null)
                .create();
        default:
            return null;
    }
}

然后你最好覆盖onPrepareDialog()(实际上这不是必需的):

// If a dialog has already been created, this is called
// to reset the dialog before showing it a 2nd time. Optional.
@Override
protected void onPrepareDialog(int id, Dialog dialog, final Bundle bundle) {
    AlertDialog dlg = (AlertDialog) dialog;
    switch (id) {
        case NEW_DIALOG :
            dlg.SetTitle("popup title");
            // and maybe something else
    }
}

在完成所有准备工作后,您可以致电ShowDialog(NEW_DIALOG),并且您的活动会记住它顶部有一个弹出窗口,并会在方向更改后重新创建。