7

我创建了一个弹出窗口,其中包含月份视图以获取日期。当我改变方向时,由于 Android 重新加载了一个活动,我的弹出窗口消失了。即使在运行时方向发生变化,如何将其打开?

4

4 回答 4

5

android:configChanges="orientation"在您的AndroidManifest.xml中包含到活动显示窗口中。这样做会告诉 android 您将自己处理方向更改,最终它不会破坏您的活动并保持窗口显示。

如果纵向和横向模式没有不同的布局,这种技术很好。但是,如果这样做,您仍然可以通过检测方向模式来执行自定义布局实现,如下所示:

@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");
}

预览,下载并安装此示例应用程序

于 2012-03-03T12:37:38.870 回答
4

每当方向发生变化时,Android 都会销毁您的活动(调用onDestroy()),然后重新启动它(调用onCreate())。
一旦你的弹出窗口出现,设置一个 flag popup_open=1。您的弹出窗口自然会有一个关闭按钮。在此按钮的单击处理程序中设置 flag=0。然后,您可以在应用程序在方法onRestoreInstanceState()onCreate(). 在这里,您将检查标志。如果标志设置为 1,则弹出弹出窗口。因此,即使在弹出窗口出现时方向发生了变化,onRestoreInstanceState()也会根据标志的状态知道要做什么。有关更多参考检查:如何处理运行时更改

于 2012-03-03T12:26:47.887 回答
1

将此属性添加到 manifest.xml 中的活动

android:configChanges="orientation|keyboard" 

那应该这样做。

于 2012-03-03T12:56:03.713 回答
0

将 PopupWindow 显示为

final View parent = findViewById(R.id.{parentId});
parent.post(new Runnable() {
    @Override
    public void run() {
        mPopup.showAtLocation(parent, ...);
    }
});

解决方向更改时未处理的异常

于 2014-08-23T17:06:08.807 回答