В моем приложении есть панель действий с 3 элементами.
Только 2 могут отображаться из-за проблем с пространством, поэтому я ожидаю, что будет отображаться первый, а остальные будут отображаться в переполнении. Однако на практике отображаются только первые 2 элемента, и переполнение не обнаруживается.
Вот соответствующий код: list_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/menu_insert"
android:icon="@android:drawable/ic_menu_add"
android:title="@string/menu_insert"
android:showAsAction="ifRoom|withText"/>
<item android:id="@+id/menu_call"
android:icon="@android:drawable/ic_menu_call"
android:title="@string/menu_call"
android:showAsAction="ifRoom|withText"/>
<item android:id="@+id/menu_agenda"
android:icon="@android:drawable/ic_menu_agenda"
android:title="@string/menu_agenda"
android:showAsAction="ifRoom|withText"/>
</menu>
Activity.java
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater mi = getMenuInflater();
mi.inflate(R.menu.list_menu, menu);
return true;
}
android
overflow
android-actionbar
Матс Раемен
источник
источник
Ответы:
Если вы хотите отобразить три точки, независимо от кнопки меню устройства! то вы можете вызвать этот метод в своем классе приложения onCreate method-
private void makeActionOverflowMenuShown() { //devices with hardware menu button (e.g. Samsung Note) don't show action overflow menu try { ViewConfiguration config = ViewConfiguration.get(this); Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey"); if (menuKeyField != null) { menuKeyField.setAccessible(true); menuKeyField.setBoolean(config, false); } } catch (Exception e) { Log.d(TAG, e.getLocalizedMessage()); } }
источник
res / menu / menu.xml
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <!-- Search / will display always --> <item android:id="@+id/action_search" android:icon="@drawable/ic_action_search" android:showAsAction="always" android:title="@string/action_search"/> <!-- Location Found --> <item android:id="@+id/action_location_found" android:icon="@drawable/ic_action_location_found" android:showAsAction="always" android:title="@string/action_location_found"/> <!-- More --> <item android:id="@+id/a_More" android:icon="@drawable/ic_action_overflow" android:showAsAction="always" android:title="More"> <menu> <!-- Refresh --> <item android:id="@+id/action_refresh" android:icon="@drawable/ic_action_refresh" android:showAsAction="never" android:title="@string/action_refresh"/> <!-- Help --> <item android:id="@+id/action_help" android:icon="@drawable/ic_action_help" android:showAsAction="never" android:title="@string/action_help"/> <!-- Check updates --> <item android:id="@+id/action_check_updates" android:icon="@drawable/ic_action_refresh" android:showAsAction="never" android:title="@string/action_check_updates"/> </menu> </item> </menu>
MainActivity.java
public class MainActivity extends Activity { @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. MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return super.onCreateOptionsMenu(menu); } }
Загрузите набор значков панели действий
источник
android:showAsAction="always"
для большего количества предметовЯ понимаю, что это не дополнительное меню, но оно похоже. Хорошо, это просто, но было трудно понять.
Сначала вам нужен пункт меню, который вы хотите использовать в качестве надувного устройства для перелива. пример
<item android:id="@+id/a_More" android:icon="@drawable/more" android:showAsAction="always" android:title="More"> </item>
Когда у вас есть элемент, добавьте подменю, содержащее нужные вам элементы, в дополнительное меню. Пример:
<item android:id="@+id/a_More" android:icon="@drawable/more" android:showAsAction="always" android:title="More"> <menu> <item android:id="@+id/aM_Home" android:icon="@drawable/home" android:title="Home"/> </menu> </item>
При нажатии это приведет к надуванию других предметов внутри. Мое приложение использует ActionBarSherlock 4.0, поэтому, прежде чем это сработает для вас, вам необходимо получить доступ к «SplitActionBar». (Будет по-прежнему работать на панели действий Android по умолчанию)
Вот как: в вашем файле AndroidManifest.xml вам нужно добавить этот код под действие, в котором вам нужно меню переполнения.
android:uiOptions="splitActionBarWhenNarrow"
ПРИМЕЧАНИЕ: ваш элемент, который расширяет ваше дополнительное меню, ДОЛЖЕН
showAsAction="always"
Ввола! у вас переполненное меню! Надеюсь, я помог тебе. :)
источник
На устройствах с кнопками аппаратного меню (Galaxy S3, упрямый, как Samsung ...) меню переполнения ведет себя как «традиционное» меню с помощью кнопки аппаратного меню.
источник
Когда вы говорите «меню переполнения», вы имеете в виду три точки, которые появляются в конце, чтобы указать, что есть другие элементы ... или вы имеете в виду разделенную панель действий, которая появляется внизу для элементов переполнения?
Если вы имеете в виду разделенную панель действий, вам следует добавить ее в файл манифеста вашей активности.
android:uiOptions="splitActionBarWhenNarrow"
По умолчанию меню переполнения из трех точек должно открываться автоматически, поэтому трудно сказать, в чем проблема, по информации, которую вы предоставили выше.
источник
Чтобы всегда отображать переполнение действия (три точки) на панели действийcompat:
в файле меню, например:
main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/action_settings" android:title="@string/action_settings" app:showAsAction="never"/> <item android:id="@+id/action_about" android:title="@string/action_about" app:showAsAction="never"/> </menu>
и в файле активности:
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return super.onCreateOptionsMenu(menu); }
У меня это сработало.
Проверено на Google Nexus S, Samsung S3.
источник
Похоже, что на устройствах с кнопкой меню дополнительное меню не отображается в ActionBar. Также у нас нет способа узнать, есть ли на устройстве кнопка аппаратного меню до уровня API 14 (4.0+).
Это решение добавляет кнопку переполнения к кнопке,
android.support.v7.app.ActionBar
которая открывает стандартное меню опций только в версии до Honeycomb (<3.0), в противном случае оставляя это для системы. В любом случае вы можете выбирать междуalways
илиifRoom
для всех действий.Получите значок переполнения из пакета значков панели действий .
Добавить меню (я отбрасываю некоторые нерелевантные части, такие как заголовки, порядок и т. Д.)
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_overflow" android:orderInCategory="100" android:icon="@drawable/ic_action_overflow" app:showAsAction="always" /> <item android:id="@+id/action_first" app:showAsAction="always" /> <item android:id="@+id/action_second" app:showAsAction="ifRoom" /> </menu>
Удалите наше действие переполнения на 3.0+
@Override public boolean onPrepareOptionsMenu(Menu menu) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { menu.removeItem(R.id.action_overflow); } return super.onPrepareOptionsMenu(menu); }
Наконец вызов
Activity.openOptionsMenu()
из действия переполнения.Э ... нет. Вы не можете не позвонить
openOptionsMenu()
из кнопки меню ... но если вы используете AndroidAnnotations , это легко сделать:@OptionsItem void action_overflow() { openOptionsMenuDeferred(); } @UiThread void openOptionsMenuDeferred() { openOptionsMenu(); }
Если нет, вы должны сделать что-то вроде этого, я полагаю
@Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == id.action_overflow) { openOptionsMenuDeferred(); return true; } } private Handler handler = new Handler(Looper.getMainLooper()); public void openOptionsMenuDeferred() { handler.post(new Runnable() { @Override public void run() { openOptionsMenu(); } } ); }
источник
Попробуйте изменить тему приложения с Theme.AppCompat.Light.DarkActionBar на Theme.AppCompat.Light
источник
Поместите
xmlns:your_app_name="http://schemas.android.com/apk/res-auto"
внутри тега меню и вместо этогоandroid:showAsAction="always"
используйтеyour_app_name:showAsAction="always"
например, для
<item android:id="@+id/action_search" android:icon="@drawable/icon_search" android:title="@string/search" your_app_name:showAsAction="ifRoom"/>
источник