2014-04-12 89 views
1

我正在嘗試向我的應用程序添加一個溢出菜單,但它不起作用,如我所願。溢出菜單是如何工作的

事實上,溢出按鈕沒有顯示在屏幕的右上角進入操作欄,但是當我點擊我的設備(三星Galaxy S3)的設置按鈕時,它的工作原理。屏幕底部會出現一種選項卡,當我選擇它時,屏幕中間會顯示帶有四項菜單的彈出窗口。

我想了解如何管理這一點,得到了相同的結果在這張照片中三:

enter image description here

的manifest.xml:

<uses-sdk 
      android:minSdkVersion="7" 
      android:targetSdkVersion="18" /> 
    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/Theme.AppCompat.Light"> 

風格。 xml:

<style name="AppBaseTheme" parent="Theme.AppCompat.Light"> 

res> menu> menu_maps_styles.xm L(這是我的溢出菜單):

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:GoogleMapAndroid="http://schemas.android.com/apk/res-auto" > 

    <!-- Normal map --> 
    <item 
     android:id="@+id/action_normal_map" 
     GoogleMapAndroid:showAsAction="never" 
     android:title="@string/action_normal_map"/> 

    <!-- Satellite map --> 
    <item 
     android:id="@+id/action_satellite_map" 
     GoogleMapAndroid:showAsAction="never" 
     android:title="@string/action_satellite_map"/> 

    <!-- Terrain map --> 
    <item 
     android:id="@+id/action_terrain_map" 
     GoogleMapAndroid:showAsAction="never" 
     android:title="@string/action_terrain_map"/> 

    <!-- Hybrid map --> 
    <item 
     android:id="@+id/action_hybrid_map" 
     GoogleMapAndroid:showAsAction="never" 
     android:title="@string/action_hybrid_map"/> 

</menu> 

MainActivity.java:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.menu_maps_styles, menu); 

     return true; 
    } 

回答

1

更新

根據您的一部開拓創新的帖子,並在下面的意見的討論中,解決方案是改變你的風格如下:

<style name="AppBaseTheme" parent="@style/Theme.Holo.Light"> 

這個解決您的問題,因爲,你的項目並不需要AppCompat庫:

<uses-sdk 
    android:minSdkVersion="11" 
    android:targetSdkVersion="18" /> 

但是,如果你想使用AppCompat,我讓我的低於原來的答案,我建議你閱讀本:Setting Up the Action Bar: Support Android 2.1 and Above
好開發。


一部開拓創新的回答

正如你可以在文檔閱讀:

注意,showAsAction上述屬性使用的標籤定義自定義命名空間。當使用由支持庫定義的任何XML屬性時,這是必需的,因爲舊設備上的Android框架中不存在這些屬性。所以對於由支持庫定義的所有屬性,必須使用自己的名稱空間作爲前綴

然後,佈局必須是:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:yourapp="http://schemas.android.com/apk/res-auto" > 
    <!-- Normal map --> 
    <item 
     android:id="@+id/action_normal_map" 
     yourapp:showAsAction="never" 
     android:orderInCategory="1" 
     android:title="@string/action_normal_map"/> 

    <!-- Satellite map --> 
    <item 
     android:id="@+id/action_satellite_map" 
     yourapp:showAsAction="never" 
     android:orderInCategory="2" 
     android:title="@string/action_satellite_map"/> 

    <!-- Terrain map --> 
    <item 
     android:id="@+id/action_terrain_map" 
     yourapp:showAsAction="never" 
     android:orderInCategory="3" 
     android:title="@string/action_terrain_map"/> 

    <!-- Hybrid map --> 
    <item 
     android:id="@+id/action_hybrid_map" 
     yourapp:showAsAction="never" 
     android:orderInCategory="4" 
     android:title="@string/action_hybrid_map"/> 
</menu> 

See the details here)的onCreateOptionsMenu方法:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu_maps_styles, menu); 
    return true; 
} 

多個項目(ID a_More)是無用的,因爲溢出菜單按鈕是通過類的擴展來實現的。這是一個自動部件。
此外,請確保您的活動延伸ActionBarActivity,你有正確的進口

  • 進口android.view.Menu;
  • import android.view.MenuItem;
  • import android.view.MenuInflater;
  • import android.support.v7.app.ActionBar;

請確保您已更新最新版本的SDK。
你的主題需要如下:

<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light"> 

而現在,你可以,如果你願意,使用程序兼容性的API 7和更高版本:

<uses-sdk 
    android:minSdkVersion="7" 
    android:targetSdkVersion="18" /> 
+0

我這樣做,你告訴了修改我但它並沒有改變。該按鈕不會出現在右側角色的操作欄上。我修改了我的帖子。但是,當我點擊時,設備的按鈕始終工作並顯示我的項目菜單。 – AlexDG

+0

嘗試刪除此uiOptions =「splitActionBarWhenNarrow」。然後,在商品中添加類別中的訂單。你也用ActionBarActivity擴展了你的MainActivity,對嗎? – Fllo

+0

我很抱歉拖延。所以我嘗試了所有你勸我,但它沒有工作..我很抱歉:( 當我去android:minSdkVersion =「7」我有一個錯誤(這是我的onCreate方法) 我想我的SDK版本是可以的。我想我的SDK版本是可以的。因爲我更新它使用谷歌地圖v2。 – AlexDG