4

我正在尝试使用自定义布局的 SupportMapFragment,现在以下代码有效:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        View view = super.onCreateView(inflater, container, savedInstanceState);
        // initMap();
        return view;
    }

但我想改变onCreateView()方法来膨胀不同的布局,而不是调用super.onCreateView()方法。看起来像这样:

View view  = inflater.inflate(R.layout.fragment, container,false);
mMap = (GoogleMap)view.findViewById(R.id.mapview);

但是 GoogleMap 不是,view所以我不能将它添加到 xml 中,如下所示:

<com.google.android.gms.maps.GoogleMap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mapview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />
4

4 回答 4

7

如果您想创建具有自定义布局的 SupportMapFragment,我更喜欢android.support.v4.app.Fragment从 Support Library 扩展并使用com.google.android.gms.maps.MapView那里的和其他视图扩展您的自定义 XML。

但要小心地将 livecycle 方法转发到这里引用MapView的this 。

于 2012-12-11T08:47:57.583 回答
5

我在地图上方添加了一个 LinearLayout。我对按钮使用了这种布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/llPlaces"
android:orientation="horizontal"
android:background="@color/ACGris">
    <Button android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="BUTTON1"/>
    <Button android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="BUTTON2"/>
    <Button android:id="@+id/btn3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="BUTTON3"/>

然后我创建了一个扩展 SupportMapFragment 的类

public class FrgMapas extends SupportMapFragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View viewMain = super.onCreateView(inflater, container, savedInstanceState);
    View viewButtons = inflater.inflate(R.layout.layout_buttons, null);

    FrameLayout mainChild = (FrameLayout) ((ViewGroup)viewMain).getChildAt(0);
    mainChild.addView(viewButtons);

    Button btn1 = (Button) viewMain.findViewById(R.id.btn1);
    btn1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Toast.makeText(getActivity(), "TuTa :)", Toast.LENGTH_LONG).show();
        }
    });

    return viewMain;
}

希望这对你有用

于 2014-05-22T19:01:17.530 回答
4

com.google.android.gms.maps.MapView是一个View你可以嵌入到你的布局中。

于 2012-12-10T16:04:32.517 回答
1

您可以在从 SupportMapFragment 派生的类中覆盖 onCreateView。您可以调用 super.onCreateView 然后将结果插入到您膨胀或实例化的自定义 ViewGroup 中。这是一些示例代码

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    FrameLayout layout = (FrameLayout) inflater.inflate(R.layout.my_layout,
            container, false);

    View v = super.onCreateView(inflater, container, savedInstanceState);
    layout.addView(v, 0);
    return layout;
}
于 2014-10-28T19:48:25.027 回答