重新定位关于方向变化的观点

时间:2014-12-01 16:07:41

标签: android screen-orientation

在我的活动中,我有一个“取决于”屏幕方向的视图。如果它处于横向模式,我使用 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
    }
}

1 个答案:

答案 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'方法,所以删除它。