在Google地图上显示标签

时间:2014-10-01 13:05:44

标签: java android android-fragments google-maps-api-2 mapfragment

我在Google地图上显示TextView时遇到问题。我在onCreate方法中以编程方式在FrameLayout中添加MapFragment,TextView在XML文件中。我可以看到,TextView已正确显示,但MapFragment覆盖它并在将TextView添加到FrameLayout时隐藏它。我已经在这里搜索了StackOverflow,但我能找到的每个主题都是用XML中的静态MapFragment。

这是我的代码:src / java / SearchMapFragment.java

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    ...
    mMapFragment = MapFragment.newInstance(options);
    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
    fragmentTransaction.add(R.id.map_layout,mMapFragment);
    fragmentTransaction.commit();
    ((TextView)rootView.findViewById(R.id.map_label)).setVisibility(View.VISIBLE);
    ...
}

和我的XML fil:res / layout / fragment_search_map.xml

<LinearLayout 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"
    android:id="@+id/search_map_wrapper_layout"
    tools:context="com.appsolute.ParkYoo.SearchMapFragment">

    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/map_layout"
        android:layout_weight="100">

        <TextView style="@style/DarkBlueText"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="New Text"
            android:id="@+id/map_label"
            android:gravity="center"
            android:layout_marginTop="15dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:visibility="gone"/>

    </FrameLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_weight="1">

        <FrameLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/search_map_frame_layout">

            <Button style="@style/WhiteText"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="Lancer la recherche"
                android:layout_margin="5dp"
                android:id="@+id/launch_search"
                android:background="@drawable/lancer" />

        </FrameLayout>
    </LinearLayout>
</LinearLayout>

提前感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

最后我找到了答案。基本上我记得在某处看到android上的布局文件的xml架构是“回到前面”。这意味着你在xml布局文件中越低,你的小部件前面就越多。因此,小部件是一个放在另一个之上。

所以我尝试在TextLayout之后放置一个TextView在xml文件中,但事实证明它是相同的,可能是因为片段是在运行时添加到FrameLayout中所以它是最后一个添加并重叠在onCreate中膨胀的TextView方法

为了解决我的问题,我已经重新设计了我的XML:

<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"
    android:id="@+id/search_map_wrapper_layout"
    android:gravity=""
    tools:context="com.appsolute.ParkYoo.SearchMapFragment">

    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/map_layout_leave_place"
        android:layout_above="@+id/utility_linear_layout">

    </FrameLayout>

    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:id="@+id/leave_place_label">

    </FrameLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/utility_linear_layout"
        android:orientation="vertical"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentBottom="true">

        <TextView style="@style/DarkBlueText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:id="@+id/street_leave_parking_spot"
            android:layout_marginTop="10dp"
            android:text="Rue X"/>

        <TextView style="@style/TitleText"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:id="@+id/city_leave_parking_spot"
            android:paddingBottom="15dp"
            android:background="@drawable/discontinued_line"
            android:text="75009 PARIS"/>

        <Button style="@style/WhiteText"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:layout_marginBottom="10dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:text="Mémoriser ma place"
            android:id="@+id/remember_parking_spot"
            android:background="@drawable/lancer"
            android:layout_gravity="center_horizontal|bottom"/>

        </LinearLayout>

</RelativeLayout>

第一个FrameLayout(map_layout_leave_place)是最深的,是我的地图显示的地方。第二个FrameLayout(leave_place_label)是我的TextView将被放置在谷歌地图布局上的位置,现在是空白。其余的发生在运行时。

我创建了一个LabelFragment,它只包含一个TextView,当我点击一个由leave_place_label托管的按钮时,它将在运行时使用常规片段事务添加。

LabelFragment frag = LabelFragment.newInstance();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(R.id.leave_place_label,frag);
ft.commit();

这就是它:

https://drive.google.com/file/d/0B1KRFmgxHcLtMEY3dDQ1c0NRYWM/edit?usp=sharing