Я не могу видеть переполнение меню на панели действий, почему?

Я использую ActionBar в Android, но он не показывает переполнение панели. Я пытаюсь как учебник, но он не работает, хотя я сделал то же самое, что не так? Я просто хочу, чтобы домой отображать, а другие на переполнение. Вот код меню, использующий панель действий в Android, но он не показывает переполнение. Я пытаюсь как учебник, но это не работает, хотя я сделал то же самое, что не так? Я просто хочу, чтобы домой отображать, а другие на переполнение. Вот код меню

<item android:id="@+id/Homebar"
    android:title="Home"
    android:orderInCategory="1"
    android:showAsAction="ifRoom"
    />
<item android:id="@+id/infobar"
    android:title="Info"
    android:orderInCategory="2"
    android:showAsAction="ifRoom"
    />
<item android:id="@+id/servicebar"
    android:title="Services"
    android:orderInCategory="2"
    android:showAsAction="ifRoom"
    />
<item android:id="@+id/onlinetoolsbar"
    android:title="Online tools"
    android:orderInCategory="2"
    android:showAsAction="ifRoom"
    />
<item android:id="@+id/mediacenterbar"
    android:title="Media center"
    android:orderInCategory="2"
    android:showAsAction="ifRoom"
    />

4 ответа

Решение

Вы, вероятно, используете устройство с выделенной кнопкой меню или эмулятор с выделенной кнопкой меню. До Android 4.4 Android не отображал кнопку переполнения, если на устройствах есть специальная кнопка меню. Если вы нажмете кнопку меню, появится меню переполнения.

Google изменил это поведение в Android 4.4 Kitkat, и теперь на всех устройствах будет отображаться кнопка переполнения. Если вы используете эмулятор, попробуйте протестировать на эмуляторе Android 4.4. Если вы тестируете на реальном устройстве с выделенной кнопкой меню, используйте эту кнопку для вызова меню переполнения.

РЕДАКТИРОВАТЬ: Чтобы получить пользовательское меню подменю / переполнения, вы должны создать отдельное меню внутри элемента меню. Как это:

 <item android:id="@+id/Homebar"
    android:title="Home"
    android:orderInCategory="1"
    android:showAsAction="ifRoom"
    >
    <menu>
     <item android:id="@+id/infobar"
         android:title="Info"
        android:orderInCategory="2"
         android:showAsAction="ifRoom"
         />
     <item android:id="@+id/servicebar"
         android:title="Services"
         android:orderInCategory="2"
         android:showAsAction="ifRoom"
         />
     <item android:id="@+id/onlinetoolsbar"
         android:title="Online tools"
         android:orderInCategory="2"
         android:showAsAction="ifRoom"
         />
     <item android:id="@+id/mediacenterbar"
         android:title="Media center"
         android:orderInCategory="2"
         android:showAsAction="ifRoom"
         />
     </menu>  
</item>

Я надеюсь, что приведенный ниже код полезен для большинства устройств для отображения панели действий с меню переполнения и использует:

Этот ниже способ легко показать меню переполнения Action Bar в большинстве устройств, которые вы можете использовать> версии 3.0.

Я проверил, что этот код работает правильно в версиях Android 4.0, 4.1, 4.2, 4.3.

MainActivity.java

package com.example.actionbaroverflowmenu;

import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.ActionBar;
import android.app.Activity;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.WindowManager;

public class MainActivity extends Activity {
private Menu mainMenu;

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

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.

    super.onCreateOptionsMenu(menu);

    getMenuInflater().inflate(R.menu.main, menu);

    mainMenu = menu;
    return true;
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub

    if(event.getAction() == KeyEvent.ACTION_DOWN){
        switch (keyCode) {
        case KeyEvent.KEYCODE_MENU:
            mainMenu.performIdentifierAction(R.id.action_overflow, 0);
            return true;
        }
    }

    return super.onKeyDown(keyCode, event);
}

}

Меню /main.xml

<item
    android:id="@+id/action_locate"
    android:icon="@drawable/ic_action_locate"
    android:orderInCategory="200"
    android:showAsAction="always"/>
<item
    android:id="@+id/action_refresh"
    android:icon="@drawable/ic_action_refresh"
    android:orderInCategory="300"
    android:showAsAction="always"/>
<item
    android:id="@+id/action_overflow"
    android:icon="@drawable/ic_action_overflow"
    android:menuCategory="container"
    android:orderInCategory="400"
    android:showAsAction="always"
    android:visible="true">
    <menu>
        <item
            android:id="@+id/action_refresh"
            android:icon="@drawable/ic_action_refresh"
            android:menuCategory="container"
            android:orderInCategory="100"
            android:showAsAction="always"
            android:title="Refresh"
            android:visible="true"/>
        <item
            android:id="@+id/action_search"
            android:icon="@drawable/ic_action_search"
            android:menuCategory="container"
            android:orderInCategory="200"
            android:showAsAction="always"
            android:title="Search"
            android:visible="true"/>
        <item
            android:id="@+id/action_settings"
            android:icon="@drawable/ic_action_settings"
            android:orderInCategory="300"
            android:showAsAction="always"
            android:title="@string/action_settings"/>

        <item
            android:id="@+id/action_help"
            android:icon="@drawable/ic_action_help"
            android:orderInCategory="400"
            android:showAsAction="always"
            android:title="Help"/>

        <item
            android:id="@+id/action_about"
            android:icon="@drawable/ic_action_about"
            android:orderInCategory="500"
            android:showAsAction="always"
            android:title="About"/>

    </menu>
</item>

Скачать пакет значков панели действий. Ссылки: Скачать пакет значков.

Вы должны поместить иконки в папку drawable для использования в файле menu/main.xml

Прочитайте это из документа:

Переполнение действий

Переполнение действия на панели действий обеспечивает доступ к менее часто используемым действиям вашего приложения. Значок переполнения появляется ТОЛЬКО на телефонах без аппаратных клавиш меню. Телефоны с клавишами меню отображают переполнение действия, когда пользователь нажимает клавишу.`

Так что это не странное поведение вашего приложения, это нормальное поведение Android, в зависимости от того, что вы положили в showAsAction приписывать menu.xml, Это зависит также от размера экрана и ориентации.

Кстати, некоторые люди используют хак, чтобы вызвать отображение меню переполнения, но, как я уже сказал, это хак, поэтому он не подходит для вашего приложения и приведет к возможным ошибкам в других устройствах / версиях. Посмотрите здесь, чтобы лучше понять.

Если вы действительно хотите, чтобы это было в вашем приложении без использования хака, проверьте это решение.

В меню переполнения отображаются только те элементы, для которых для android:showAsAction установлено значение "never". Вы установили его на "ifRoom" для каждого элемента.

Другие вопросы по тегам