2017-04-06 110 views
1

我想創建一個選項菜單,即使設備具有自己的「硬件」選項按鈕,它也會顯示類似於Whatsapp的選項菜單。我在網上找到的解決方案工作得很好,直到我想添加另一個行動到酒吧。Android活動菜單

菜單:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto"> 
<item 
      android:title="" 
      android:id="@+id/addViewedMovie" 
      android:icon="@mipmap/ic_add_to_queue_black_24px" 

      android:showAsAction="always" 

      ></item>  
     <item 
      android:title="" 
      android:id="@+id/menu_overflow" 
      android:icon="@mipmap/ic_more_vert_white_48dp" 

      app:showAsAction="always"> 
      <menu> 
       <item 
        android:id="@+id/show_settings" 
        app:showAsAction="never" 
        android:title="@string/setttings"/> 
       <item 
        android:id="@+id/show_help" 
        app:showAsAction="never" 
        android:title="@string/help"/> 
       <item 
        android:id="@+id/show_about" 
        app:showAsAction="never" 
        android:title="@string/about"/> 

      </menu> 

     </item> 

    </menu> 

而這在我的MainActivity:

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

有了這個應用程序強制addViewedMovie動作轉換成溢流菜單。有誰知道如何防止這種情況?

回答

0

試試這個代碼,如果它的工作告訴我..你應該使用app:showAsActionandroid:showAsAction還你不需要使用子菜單來顯示3點..只是下面的代碼工作正常,也顯示出3點

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:title="Movie" 
     android:id="@+id/addViewedMovie" 
     android:icon="@mipmap/ic_add_to_queue_black_24px" 
     app:showAsAction="always"/> 

    <item 
     android:id="@+id/show_settings" 
     app:showAsAction="never" 
     android:title="@string/setttings"/> 
    <item 
     android:id="@+id/show_help" 
     app:showAsAction="never" 
     android:title="@string/help"/> 
    <item 
     android:id="@+id/show_about" 
     app:showAsAction="never" 
     android:title="@string/about"/> 
</menu> 
+0

謝謝,我是android新手。 – Curunir

+0

@Curunir只是複製粘貼這段代碼並告訴我它的工作與否? –

+0

是的,我做了,它的工作,否則我不會檢查你的答案。 – Curunir

0

簡單。 使用應用程序而不是android作爲應用程序的設計支持庫。 所以,在Gradle中建立依賴關係,你必須有:編譯com.android.support:design.....那樣。但是,我已經看到你已經在下面使用它了。所以,

只需在您的addViewedMovie項目中使用:app:showAsAction="never"而不是android:showAsAction="always"

記住:never表示它將在溢出菜單項上。意味着將在操作欄中顯示。

0

創建文件夾名稱菜單在您的res文件夾中。

menu.xml文件

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:myapp="http://schemas.android.com/apk/res-auto"> 
    <item android:id="@+id/search" 
     android:icon="@drawable/ic_launcher" 
     myapp:showAsAction="ifRoom" /> 

    <item android:id="@+id/abc" 
     android:title="ABC" /> 
    <item android:id="@+id/abc1" 
     android:title="ABC1" /> 
    <item android:id="@+id/abc2" 
     android:title="ABC2" /> 
</menu> 

在Java文件把這個: -

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.search: 

       return true; 

      case R.id.abc: 

       return true; 

      case R.id.abc1: 

       return true; 

      case R.id.abc2; 

       return true; 

      default: 

       return super.onOptionsItemSelected(item); 
     } 
    } 
0

如果您使用的是一個片段,添加下面一行在OnCreate

setHasOptionsMenu(真);

和另外兩個功能

 @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     super.onCreateOptionsMenu(menu, inflater); 
    } 

充氣上述方法的意見。聽聽下面的動作。

@Override public boolean onOptionsItemSelected(MenuItem item) { 
    return super.onOptionsItemSelected(item); 
    }