在我的活动中,我有一个“取决于”屏幕方向的视图。如果它处于横向模式,我使用 layout-large-hand 下的布局,但如果它处于纵向模式,我使用 layouts 文件夹下的布局。 活动还显示带有一些标记和信息的地图。
在我的AndroidManifest中我有
android:configChanges="orientation|screenSize"
但该活动仅显示纵向模式下的布局。
我该如何解决这个问题?
编辑3/12:
我有这样的布局:
<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"
android:orientation="vertical" >
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.MapFragment" />
<include
android:id="@+id/my_view"
layout="@layout/my_view"
android:visibility="gone" />
</RelativeLayout>
我希望my_view更改布局,但地图仍然包含所有标记,缩放级别,位置,ecc ecc ......
当我点击活动中以动态创建的按钮时,my_view可见。
编辑2:
就像SweetWisherツ所说,我试图为视图设置自定义行为。但是当我旋转设备时,地图会消失。这是我在活动中的代码的一部分:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initUI();
}
private void initUI() {
setContentView(R.layout.my_layout);
if (mp == null) {
mp = MapFragment.newInstance();
}
getFragmentManager().beginTransaction().replace(R.id.placeholder, mp).commit();
initUIStuff()
}
private void initUIStuff(){
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
initUI();
}
@Override
protected void onStart() {
super.onStart();
initGMap();
}
@Override
protected void onResume() {
super.onResume();
initGMap();
}
private void initGMap() {
if (mp != null {
//Initialize Map
}
}
答案 0 :(得分:1)
如果您在清单中使用android:configChanges="orientation"
,则会阻止Android在屏幕方向更改时默认重置视图层次结构。您必须使用onConfigurationChanged
方法手动更改您的观看次数,我的意思是夸大您想要的布局并用它替换旧的布局。如果您想利用Android自动视图层次结构重置,请不要使用android:configChanges="orientation"
。
编辑: 使用以下代码通过XML添加地图片段:
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.MapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
你现在也不需要'onConfigurationChange'方法,所以删除它。