2012-12-10 59 views
4

我想有SupportMapFragment與自定義佈局,現在下面的代碼工作:具有自定義佈局的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" 
    /> 

回答

6

如果您想創建一個帶有自定義佈局的SupportMapFragment,我傾向於從支持庫中擴展android.support.v4.app.Fragment,並使用com.google.android.gms.maps.MapView和其他視圖擴充自定義XML。

但是請注意將生命週期方法轉發至MapView,引用爲here

+0

嘗試將片段添加到屏幕時,我收到一個空白屏幕。 – meh

+0

您是否已將所有生命週期方法轉發到新的MapView? ((MapView)findViewById(R.id.mapView))。onCreate(savedInstanceState);' 在你的片段的'onCreate()'? – Greeny

+0

哦,我需要明確調用方法,我會嘗試。所以我需要覆蓋所有的生命週期方法? – meh

4

com.google.android.gms.maps.MapViewView你可以嵌入您的佈局。

+0

我想使用google map v2 api。 – meh

+2

@themilkman:'com.google.android.gms.maps.MapView'來自v2 API。 http://developer.android.com/reference/com/google/android/gms/maps/MapView.html https://developers.google.com/maps/documentation/android/map#mapview – CommonsWare

+0

好的謝謝,看起來像我會幫你的。 – meh

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; 
} 

希望這對你的作品

+0

這在Android 2.3上失敗了,因爲onCreateView()將返回一個帶12個空子元素的framelayout。在Android 4.1.2中,我在後面的階段得到了另一個空指針異常。 – elcuco

1

您可以覆蓋onCreateView類您從SupportMapFragment派生的類。您可以調用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; 
}