2014-12-01 1 views
0

В моей деятельности У меня есть вид, который «зависит» от ориентации экрана. Если он находится в ландшафтном режиме, я использую макет под макет-большой рукой, но если он в портретном режиме, я использую макеты под макетами . Активность показывает также карту с некоторыми маркерами и информацией.Reload a View on Orientation Change

В моей AndroidManifest я есть

android:configChanges="orientation|screenSize" 

Но деятельность показывает только расположение на портретном режиме.

Как это исправить?

EDIT 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 изменения макета, но карта остается со всеми маркерами, уровень масштабирования, позиции, ЕСС КИО, ...

my_view видна, когда я нажимаю кнопку, созданную динамически в действии.

EDIT 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

[прочитайте это] (http://stackoverflow.com/a/13848525/2591002) и [следуйте за этим] (http://stackoverflow.com/a/13938015/2591002) –

+0

Я попытался следовать руководству , Я добавил некоторые сообщения в сообщение. Но когда я нажимаю кнопку, у my_view был такой же макет. – Garro88

ответ

1

Если вы используете android:configChanges="orientation" в манифесте вы предотвращения Android делать сброс зрения иерархии по умолчанию на изменение ориентации экрана. Вы должны вручную изменить свои представления в методе onConfigurationChanged, и я имею в виду раздувание желаемого макета и замену его старого макета на него. Если вы хотите использовать автоматический сброс иерархии настроек Android, не используйте android:configChanges="orientation".

Edit: Используйте следующий код для добавления фрагмента карты через 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 так удалить его.

+0

Так что, если я хочу использовать другой макет для одного представления, если я в ландшафтном или портретном режиме, мне нужно управлять всеми взглядами? В любом случае я попытался удалить тег android: configChanges в манифесте, но я всегда смотрю тот же макет. – Garro88

+1

Если вы будете продолжать использовать 'android: configChanges', тогда да, вы должны управлять всеми представлениями вручную. Без 'android: configChanges' ОС Android будет делать просмотр материалов для вас. Я думаю, что вы не заметите разницы даже после удаления тега, потому что имена ваших каталогов макетов не соответствуют. Поместите свой ландшафт в/res/layout-land и ваш портретный макет в/res/layout. –

+0

Ooooops ... папка для ландшафтного дизайна была макеты-большие-земля и не макеты-земля. Теперь это работает! Но карта не отображается после вращения. См. Мое обновленное сообщение. – Garro88

 Смежные вопросы

  • Нет связанных вопросов^_^