带有两个片段的布局:一个片段和一个带有Google Map的片段

时间:2017-06-12 11:16:40

标签: android google-maps android-layout android-fragments

我试图实施以下设计。 TextView应按内容占用空间,其余部分为地图。

+----------------+
|                |
|    Map         | <-- id/fragment_container_1
|                |
|                |
+----------------+
|                |
|    TextView    | <-- id/fragment_container_2
|                |
+----------------+

main.xml中

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <FrameLayout
        android:id="@+id/fragment_container_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <FrameLayout
        android:id="@+id/fragment_container_2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

fragment_1.xml

<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Client Label" />
</LinearLayout>

map.xml

<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <com.google.android.gms.maps.MapView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/map_view_observer" />
</LinearLayout>

Java代码:

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
// map
Fragment fragmentMap = fragmentManager.findFragmentByTag("ObserverMapFragment");
if (fragmentMap == null)   {
    fragmentMap = ObserverMapFragment.newInstance();
    fragmentTransaction
            .replace(R.id.fragment_container_1, fragmentMap, "ObserverMapFragment");
}
// fargment 1
Fragment fragmentObserver = fragmentManager.findFragmentByTag("ObserverFragment");
if (fragmentObserver == null)   {
    fragmentObserver = ObserverFragment.newInstance();
    fragmentTransaction
            .replace(R.id.fragment_container_2, fragmentObserver, "ObserverFragment");
}
fragmentTransaction.commit();

然而,在那之后,我得到了地图占据所有可见空间。

+----------------+
|                |
|                |
|    Map         |
|                |
|                |
+----------------+

我犯了哪个错误? 也许我在使用多个片段的应用程序架构中出错了?

3 个答案:

答案 0 :(得分:2)

像这样编辑你的main.xml

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<FrameLayout
    android:layout_weight="1"
    android:id="@+id/fragment_container_1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

<FrameLayout
    android:id="@+id/fragment_container_2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

答案 1 :(得分:2)

你可以试试这个

  1. 添加 android:layout_height =&#34; 0dp&#34;
  2. 添加 android:weightSum
  3. 最后

    <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:weightSum="2">
    
                <FrameLayout
                    android:layout_weight="1"
                    android:id="@+id/fragment_container_1"
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                  />
    
                <FrameLayout
                    android:layout_weight="1"
                    android:id="@+id/fragment_container_2"
                    android:layout_width="match_parent"
                    android:layout_height="0dp" />
          </LinearLayout>
    

答案 2 :(得分:-1)

不要给出textview大小和地图大小匹配父级。如果没有解决方案请告诉我。