Панель действий Android, не отображающая переполнение
У меня есть панель действий в моем приложении с тремя элементами.
Из-за проблем с пространством могут отображаться только 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;
}
Спасибо!
Ответы
Ответ 1
Если вы хотите показать три точки, независимо от кнопки меню устройства! то вы можете вызвать этот метод в своем классе приложения '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());
}
}
Ответ 2
![Action Bar]()
Рез/меню/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);
}
}
Загрузите Набор значков панели действий
Ответ 3
Я понимаю, что это не меню переполнения, но похоже.
Хорошо, это просто, но было трудно понять.
Сначала вам нужен элемент меню, который вы хотите использовать в качестве переполнения. Пример
<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"
Vwola! у вас есть меню переполнения! Надеюсь, я помог тебе.:)
Ответ 4
На устройствах с аппаратными кнопками меню (Galaxy S3, упрямый, как Samsung...) меню переполнения ведет себя как "традиционное" меню, используя кнопку аппаратного меню.
Ответ 5
Когда вы говорите "переполнение" меню, вы имеете в виду три точки, которые отображаются в конце, чтобы указать, что есть больше элементов.... или вы имеете в виду раздельную панель действий, которая отображается внизу для элементов переполнения
Если вы имеете в виду панель действий split, вы должны добавить это в файл манифеста активности
android:uiOptions="splitActionBarWhenNarrow"
По умолчанию меню переполнения трех точек должно выполняться автоматически, поэтому вам сложно определить, что проблема, из информации, приведенной выше.
Ответ 6
Похоже, что на устройствах с кнопкой меню меню переполнения не отображается в ActionBar. Также у нас нет способа узнать, есть ли у устройства аппаратное меню до API уровня 14 (4.0+).
Это решение добавляет кнопку переполнения к android.support.v7.app.ActionBar
, которая открывает меню стандартных опций только для предварительного сотового (< 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()
из действия переполнения.
Er... нет. Вы не можете вызывать 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();
}
}
);
}
Ответ 7
Чтобы показать действие переполнения (три точки) на actionbarcompat:
в файле меню, например:
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.
Ответ 8
Поместить 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"/>
Ответ 9
Попробуйте изменить тему приложения.
Theme.AppCompat.Light.DarkActionBar to Theme.AppCompat.Light