2014-12-01 58 views
0

在我的活動中,我有一個視圖「取決於」屏幕方向。如果它處於橫向模式下,我使用佈局大手下的佈局,但是如果它處於縱向模式下,我使用佈局文件夾下的佈局。 該活動還顯示包含一些標記和信息的地圖。重新定位方向變化的視圖

在我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是可見的,當我點擊在活動中dinamically創建的按鈕。

編輯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) – 2014-12-01 16:10:34

+0

我試着按照指南。我在帖子中添加了一些信息。但是當我點擊按鈕時,my_view具有相同的佈局。 – Garro88 2014-12-03 11:32:13

回答

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」方法,以便將其刪除。

+0

因此,如果我想爲單個視圖使用不同的佈局,如果我處於橫向或縱向模式,我必須管理所有視圖行爲?無論如何,我試圖刪除清單中的'android:configChanges'標籤,但我總是查看相同的佈局。 – Garro88 2014-12-03 11:57:54

+1

如果您繼續使用'android:configChanges',那麼您必須手動管理所有視圖。如果沒有'android:configChanges',Android操作系統會爲您提供視圖。我認爲,即使在刪除標籤後,由於佈局目錄的名稱不正確,您也無法注意到其中的差異。將橫向佈局放置在/ res/layout-land中,並將您的縱向佈局放置在/ res/layout中。 – 2014-12-03 12:02:59

+0

Ooooops ...風景佈局的文件夾是layouts-large-land而不是layouts-land。現在它工作了!但地圖在旋轉後不顯示。看到我更新的帖子。 – Garro88 2014-12-03 14:19:33