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