Панель действий Android, не отображающая переполнение
У меня есть панель действий в моем приложении с 3 элементами.
Из-за проблем с пространством могут отображаться только 2, поэтому я ожидаю, что первый будет отображаться, а остальные будут отображаться в переполнении. Однако на практике показаны только первые 2 элемента, и невозможно обнаружить переполнение.
Вот соответствующий код: list_menu.xml
- Как изменить значок по умолчанию в SearchView, который будет использоваться в панели действий на Android?
- Элементы меню не отображаются на панели действий.
- Как выровнять название в центре ActionBar в теме по умолчанию (Theme.Holo.Light)
- Панель действий Кнопка «Назад» не работает
- Android: как скрыть ActionBar при определенных действиях
Activity.java
public boolean onCreateOptionsMenu(Menu menu) { MenuInflater mi = getMenuInflater(); mi.inflate(R.menu.list_menu, menu); return true; }
- ProgressBar в панели действий
- Не удается найти Theme.AppCompat.Light для новой поддержки Android ActionBar
- Как объявить панель инструментов с расширенной высотой / панель действий на Android Lollipop?
- Пользовательский прозрачный Android ActionBar
- Как изменить цвет заголовка панели действий в коде
- Как изменить цвет фона ActionBar ActionBarActivity с помощью XML?
- ActionBar в диалоговом окне диалога
- Навигационные режимы панели действий устарели в Android L
Если вы хотите показать три точки, независимо от кнопки меню устройства! то вы можете вызвать этот метод в своем classе приложения ‘onCreate method-
private void makeActionOverflowMenuShown() { //devices with hardware menu button (eg 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()); } }
Рез / меню / menu.xml
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); } }
Загрузите набор значков панели действий
Я понимаю, что это не переполнение меню, но похоже. Хорошо, это просто, но было трудно понять.
Сначала вам нужен элемент меню, который вы хотите использовать в качестве переполнения. пример
-
После того, как у вас есть элемент, добавьте подменю, содержащее ваши элементы, которые вы хотите в меню переполнения. Пример:
-
По щелчку это раздувает другие предметы внутри. Мое приложение использует ActionBarSherlock 4.0, поэтому прежде чем это будет работать для вас, вам нужно получить доступ к «SplitActionBar». (Будет по-прежнему работать по умолчанию для Android android)
Вот как это сделать: в вашем файле AndroidManifest.xml вам нужно добавить этот код под действие, в котором вы нуждаетесь в меню переполнения.
android:uiOptions="splitActionBarWhenNarrow"
ПРИМЕЧАНИЕ. Ваш элемент, который раздувает ваше меню переполнения, ДОЛЖЕН showAsAction="always"
Vwola! у вас есть меню переполнения! Надеюсь, я помог тебе. 🙂
На устройствах с аппаратными кнопками меню (Galaxy S3, упрямый, как Samsung …) меню переполнения ведет себя как «традиционное» меню, используя кнопку меню аппаратного обеспечения.
Когда вы говорите «переполнение» меню, вы имеете в виду три точки, которые появляются в конце, чтобы указать, что есть больше предметов …. или вы имеете в виду раздельную панель действий, которая отображается внизу для элементов переполнения?
Если вы имеете в виду панель действий split, вы должны добавить это в файл манифеста активности
android:uiOptions="splitActionBarWhenNarrow"
По умолчанию меню переполнения трех точек должно происходить автоматически, поэтому трудно сказать, в чем проблема, из приведенной выше информации.
Чтобы всегда показывать действие (три точки) на actionbarcompat:
в файле меню, например:
main.xml
и в файле активности:
@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
который открывает меню стандартных опций только для предварительного сотового (<3,0), в противном случае он остается в системе. В любом случае вы можете выбирать между always
или ifRoom
для всех действий.
Получите значок переполнения из пакета значков панели действий .
Добавьте меню (некоторые части, не относящиеся к ним, как названия, заказы и т. Д.)
Удалите наше действие переполнения на 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"
use your_app_name:showAsAction="always"
например,