Похоже, что на устройствах с кнопкой меню меню переполнения не отображается в панели действий.Также у нас нет возможности узнать, есть ли на устройстве аппаратная кнопка меню до Уровень API 14 (4.0+).
Это решение добавляет кнопку переполнения к android.support.v7.app.ActionBar
, которая открывает стандартное меню опций только перед сотой (<3.0), в противном случае она остается в системе.В любом случае вы можете выбрать между <code>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();
}
}
);
}