我有第一个带有地图片段的布局,它可以完美地填充整个屏幕的配置更改(方向)。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.project.MainActivity" >
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment" />
</RelativeLayout>
问题是当第一个布局以透明方式进入背景时。带有微调器的新第二个布局出现在第一个布局上,但是当方向改变时,地图片段不会填满整个屏幕。它保持宽度。带有微调器的第二个布局填满了所有屏幕。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:orientation="vertical"
tools:context="com.example.project.SecondActivity" >
<Spinner
android:id="@+id/spinner"
android:drawSelectorOnTop="true"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
先谢谢了!我真的很感激任何帮助。
编辑:我在清单中的第一个活动中使用android:configChanges="screenSize|orientation"
。
答案 0 :(得分:0)
我看到SecondActivity的布局对于两个维度都有match_parent,因此当您启动SecondActivity时,MainActivity将发送到后台堆栈并停止。有关更多信息,请参阅此链接:
https://developer.android.com/guide/components/tasks-and-back-stack.html: “当活动停止时,系统会保留其用户界面的当前状态。”因此,当配置发生变化时(如方向),只更新SecondActivity,因为它是唯一被聚焦并具有整个屏幕可见性的。
尝试将SecondActivity布局设置为两个维度(宽度和高度)的wrap_content,因此MainActivity布局将被部分隐藏,并且即使重点关注SecondActivity,Android系统也会在需要时刷新配置。
另见https://developer.android.com/guide/components/activities.html。 “顿了顿: 另一项活动是在前景并具有焦点,但这一活动仍然可见。也就是说,另一个活动在这个活动的顶部可见,并且该活动部分透明或不覆盖整个屏幕。暂停的活动完全处于活动状态(Activity对象保留在内存中,它保留所有状态和成员信息,并保持附加到窗口管理器),但在极低的内存情况下可被系统杀死。 “停止: 活动完全被另一个活动遮挡(活动现在在“背景”中)。已停止的活动仍处于活动状态(活动对象保留在内存中,它维护所有状态和成员信息,但未附加到窗口管理器)。但是,它不再对用户可见,并且当其他地方需要内存时,它可能会被系统杀死。“
所以关键是不要在SecondActivity布局中使用“匹配父”,而在MainActivity上使用透明背景。
请尝试一下,让我知道它是怎么回事!谢谢!