6

我的Android應用支持2.2及更高版本。我正在使用操作欄的appcompat支持庫,因此它只應顯示是否有不適合的東西。我希望我的操作欄支持溢出按鈕(三個垂直方格),點擊時可以顯示其他項目的菜單。Android支持操作欄不顯示溢出菜單

在我的菜單文件中,我有三項設置。但是在應用程序中,我只看到其中的兩個,而溢出按鈕也沒有顯示。

activity_menu.xml

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

    <item 
     android:id="@+id/action_settings" 
     android:icon="@drawable/checkbox" 
     android:title="@string/action_settings" 
     sord.ids_connect:showAsAction="ifRoom" /> 

    <item 
     android:id="@+id/action_settings2" 
     android:icon="@drawable/checkbox_checked" 
     android:title="@string/action_settings" 
     sord.ids_connect:showAsAction="ifRoom" /> 

    <item 
     android:id="@+id/action_settings3" 
     android:icon="@drawable/ic_launcher" 
     android:title="@string/action_settings" 
     sord.ids_connect:showAsAction="ifRoom" /> 

</menu> 

的java文件

import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.support.v7.app.ActionBar; 
import android.support.v7.app.ActionBarActivity; 

public class Activity_Menu extends ActionBarActivity { 

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

     ActionBar actionBar = getSupportActionBar(); 
     actionBar.setDisplayHomeAsUpEnabled(true); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_menu, menu); 
     //return true; 
     return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case android.R.id.home: 
       super.onBackPressed(); 
       return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

清單

<activity 
     android:theme="@style/Theme.AppCompat.Light.DarkActionBar" 
     android:name="sord.ids_connect.Activity_Menu" 
     android:screenOrientation="portrait" 
     android:label="@string/title_activity_menu" > 
    </activity> 
+1

你按你的設備或模擬器上的MENU按鈕?在模擬器上,MENU按鈕映射到PgUp。 – CommonsWare

+0

正在測試我的手機,當我按下菜單按鈕時,我看到菜單出現在底部,只有一個選項顯示「設置」,爲什麼在菜單文件中有3個項目時只有1個選項出現? – omega

回答

1
我的手機上

林測試,當我按下菜單按鈕,我看到了菜單顯示在底部,只有一個選項顯示「設置」

這就是溢出。

爲什麼當菜單文件中有3個項目時,只有1個選項出現在那裏?

因爲其他兩個都在操作欄中。你指定了ifRoom,並且有兩個空間,而不是三個空間。

+0

哦,我明白了,但是我怎樣才能讓三個點按鈕出現在頂部? – omega

+0

@omega:它會出現在沒有MENU按鈕的設備上,以及運行Android 4.4和更高版本的任何設備上。請參閱我的博客文章以獲取更多信息:http://commonsware.com/blog/2013/12/09/menu-key-dead-again.html – CommonsWare

+0

如何使用java代碼打開溢出菜單? – omega

0

你,如果你使用的是支持庫,您需要從自己的名稱空間聲明showAsAction需要菜單中的菜單佈局如下

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:sord.ids_connect="http://schemas.android.com/apk/res-auto"> 
<item 
    android:id="@+id/action_container" 
    android:title="Menu" 
    android:showAsAction="never">   
<item 
    android:id="@+id/action_settings" 
    android:icon="@drawable/checkbox" 
    android:title="@string/action_settings" 
    sord.ids_connect:showAsAction="ifRoom" /> 

<item 
    android:id="@+id/action_settings2" 
    android:icon="@drawable/checkbox_checked" 
    android:title="@string/action_settings" 
    sord.ids_connect:showAsAction="ifRoom" /> 

<item 
    android:id="@+id/action_settings3" 
    android:icon="@drawable/ic_launcher" 
    android:title="@string/action_settings" 
    sord.ids_connect:showAsAction="ifRoom" /> 
</item> 

</menu> 
7

;看起來像這樣app:showAsAction。你可以參考eOnOe的回答。

使用android:showAsAction不支持支持庫,因爲它使用它自己的操作欄實現而不是框架的實現。

您還可以隨時項組合成例如圖標:

<item ... 
     android:icon="@drawable/abs__ic_menu_moreoverflow_holo_dark"> 
    <menu>  
    <item .../> 
    <item .../> 
    </menu> 
</item> 
0
 Change Your menu.xml with the following code. 




    <menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:sord.ids_connect="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/action_container" 
     android:title="Menu" 
     android:showAsAction="always">   
    <item 
     android:id="@+id/action_settings" 
     android:icon="@drawable/checkbox" 
     android:title="@string/action_settings" 
     android:showAsAction="always"/> 

    <item 
     android:id="@+id/action_settings2" 
     android:icon="@drawable/checkbox_checked" 
     android:title="@string/action_settings" 
     android:showAsAction="always" /> 

    <item 
     android:id="@+id/action_settings3" 
     android:icon="@drawable/ic_launcher" 
     android:title="@string/action_settings" 
     android:showAsAction="always" /> 
    </item> 

    </menu> 
14

一般參考

1 - 覆蓋onCreateOption和膨脹的菜單

注意

如果返回true或超級呼叫無關緊要

@Override 

public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_menu, menu); 
    return super.onCreateOptionsMenu(menu); 
} 

2 - 將名稱空間添加到menu.xml文件。

xmlns:**yourapp**="http://schemas.android.com/apk/res-auto" 

3 - 的showAsAction設置爲總是ifRoom

**yourapp**:showAsAction="ifRoom" 

4 - 如果你正在使用程序兼容性確保您的活動延伸ActionBarActivity,你不必更改ActionBar的任何值以便能夠在欄中看到您的menuOption。

最後,您將有類似[記住用戶適當的命名空間yourapp]

main.xml中

<item 
    android:id="@+id/action_settings" 
    android:icon="@drawable/ic_action_settings" 
    android:title="@string/action_settings" 
    yourapp:showAsAction="ifRoom" /> 

您活動

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return super.onCreateOptionsMenu(menu); 
} 
+0

yourapp:showAsAction =「ifRoom」 這個黑客使它工作 - 即使物理按鈕可用,也顯示菜單項。 – Master

+0

如何在沒有xml的java中做到這一點? –

+0

好吧,我發現它在SupportMenuItem.setShowAsAction() –

2

僅當您的設備沒有菜單按鈕時,Android顯示溢出菜單。當然,你可以創建一個默認爲每個設備的黑客,但它不是推薦的解決方案。併爲您的每一項添加android:showAsAction="never",這就是說你的設備顯示溢出菜單,如果你沒有菜單按鈕。

-2

我有同樣的問題。我解決了它的:

1)評論return true;

2)在取消return super.onKeyUp(keyCode, event);

公共boolean onKeyUp(int keyCode, KeyEvent event)

相關問題