2012-07-07 113 views
17

我正在使用操作欄處理Android應用程序菜單,我想將下拉菜單放置在操作欄中,就像Google地圖應用程序中的下拉菜單一樣。 Google Maps ActionBar操作欄上的下拉菜單

有人能幫助我嗎?如何實現這一點請指出一些我可以遵循的簡單教程。

+0

請檢查您的問題作爲回答,或者如果有必要改寫它。 – JJD 2013-02-14 15:42:33

+0

請檢查Android文檔:http://developer.android.com/guide/topics/ui/actionbar.html#Dropdown – 2013-03-15 09:55:24

回答

11

添加到您的活動onCreate()方法:

// Adapter 
SpinnerAdapter adapter = 
     ArrayAdapter.createFromResource(this, R.array.actions, 
     android.R.layout.simple_spinner_dropdown_item); 

// Callback 
OnNavigationListener callback = new OnNavigationListener() { 

    String[] items = getResources().getStringArray(R.array.actions); // List items from res 

    @Override 
    public boolean onNavigationItemSelected(int position, long id) { 

     // Do stuff when navigation item is selected 

     Log.d("NavigationItemSelected", items[position]); // Debug 

     return true; 

    } 

}; 

// Action Bar 
ActionBar actions = getActionBar(); 
actions.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 
actions.setDisplayShowTitleEnabled(false); 
actions.setListNavigationCallbacks(adapter, callback); 

此示例要求列表項的數組資源:

RES /價值/ arrays.xml

<string-array name="actions"> 
    <item>Item 1</item> 
    <item>Item 2</item> 
    <item>Item 3</item> 
</string-array> 

或者,您可以創建自己的適配器和從SpinnerAdapter擴展的佈局,以顯示更高級的或動態的列表項。

要使活動onCreate代碼更加整潔,您還可以更改Activity以實現OnNavigationListener,並使用回調代碼添加onNavigationItemSelected覆蓋。然後在setListNavigationCallbacks()方法中將「回調」更改爲「this」。

請注意,您需要針對操作欄定位API 11+,否則您需要添加版本檢查或支持庫。

1

檢查此鏈接也實在是有幫助的例子Example link

GoogleMap map; 

TextView txt; 

String[] mapTypes={"Normal","Hybrid","Satellite","Terrain"}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)) 
      .getMap(); 

    txt=(TextView)findViewById(R.id.textView1); 

//to set map Type 
    map.setMapType(GoogleMap.MAP_TYPE_NORMAL); 

//To set the marker on map on specific location using lat lag 
    // latitude and longitude 
    double latitude = 18.520430300000000000; 
    double longitude = 73.856743699999920000; 

    // create marker 
    MarkerOptions marker = new MarkerOptions().position(new LatLng(latitude, longitude)).title("My Location"); 

    // change color to the marker icon 
    marker.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_CYAN)); 

    // adding marker 
    map.addMarker(marker); 

    // Create an array adapter to populate dropdownlist 
    ArrayAdapter<String> adapter =new ArrayAdapter<String>(getBaseContext(), android.R.layout.simple_spinner_dropdown_item, mapTypes); 

    /** Enabling dropdown list navigation for the action bar */ 
    getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 

    /** Defining Navigation listener */ 
    ActionBar.OnNavigationListener navigationListener=new ActionBar.OnNavigationListener() { 

     @Override 
     public boolean onNavigationItemSelected(int itemPosition, long itemId) { 
      Toast.makeText(getBaseContext(), "U Select : "+mapTypes[itemPosition], Toast.LENGTH_SHORT).show(); 
      if (mapTypes[itemPosition].equals("Normal")) { 
       map.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
      } 
      else if (mapTypes[itemPosition].equals("Hybrid")) { 
       map.setMapType(GoogleMap.MAP_TYPE_HYBRID); 
      } 
      else if (mapTypes[itemPosition].equals("Satellite")) { 
       map.setMapType(GoogleMap.MAP_TYPE_SATELLITE); 
      } 
      else if (mapTypes[itemPosition].equals("Terrain")) { 
       map.setMapType(GoogleMap.MAP_TYPE_TERRAIN); 
      } 
      return false; 
     } 
    }; 

    // Setting dropdown items and item navigation listener for the actionbar 
    getActionBar().setListNavigationCallbacks(adapter, navigationListener); 

}