Панель действий не показывает элементы

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

Я разрабатываю для Kitkat (4.4) и пытаюсь использовать панель действий с темой: holo.light.darkActionBar.

Я создал несколько файлов xml с элементами меню и связал их в классе java с действием:

меню/главное:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">
<item android:id="@+id/action_filter"
    android:title="@string/action_filter"
    android:orderInCategory="100"
    android:icon="@drawable/ic_action_filter"
    app:showAsAction="ifRoom" />

MainActivity:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    menu.clear();
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

Проблема заключается в следующем: когда я нажимаю на меню/main.xml, я вижу, что элемент добавляется на панель действий. Но он никогда не появляется в файле activity_main.xml.

Я искал много часов и рассмотрел следующее: - установить minSDK на 19 - я знаю, что некоторое время он не отображается, потому что на устройстве есть кнопка меню. Но я использую значок и говорю, что он должен отображаться. Поэтому должно появиться. И я также использую эмуляцию Nexus, у которой нет кнопки меню. -Я использую студию Android и вставляю действия с помощью студии Android. -The mainActivity расширяет FragmentActivity (потому что я выбрал активность Google Maps) - Я пробовал другие темы, но затем панель действий полностью исчезала (oc не использовал .noActionBar!) - Я устанавливаю стиль для панели действий и указываю красный цвет. Этот цвет распространяется на действие, но не на элементы.

мой импорт:

import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.view.Menu;

import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;

Как это должно выглядеть: рендеринг меню/main.xml

Как это выглядит сейчас: рендеринг activity_main

Я действительно очень надеюсь, что некоторые из вас могут мне помочь, это сводит меня с ума.


person Lao Tse    schedule 05.06.2015    source источник
comment
Делаете ли вы что-нибудь в одном из своих фрагментов, что может переопределить меню Activity? Вам также, вероятно, следует использовать вместо этого новую панель инструментов: developer.android.com/reference /android/widget/Toolbar.html   -  person ajpolt    schedule 05.06.2015


Ответы (2)


Я думаю, ваш код для раздувания меню должен выглядеть так:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, menu);
return super.onCreateOptionsMenu(menu);
}

И удалите строку menu.clear().

person Anggrayudi H    schedule 05.06.2015
comment
Спасибо за ваш ответ. к сожалению, это не работает. ps: мое имя файла меню - main (но это не имеет большого значения) - person Lao Tse; 06.06.2015
comment
Я изменил это и то, что мне сказал CommonsWare, и теперь это работает :) - person Lao Tse; 06.06.2015

попробуйте использовать панель действий с темой: holo.light.darkActionBar

Это означает, что вы пытаетесь использовать встроенную панель действий.

Я создал несколько файлов xml с элементами меню и связал их в классе java с активностью.

Избавьтесь от пространства имен app и переименуйте app:showAsAction в android:showAsAction. Соглашение app используется для панели действий appcompat-v7, которую вы не используете.

Основная деятельность:

Избавьтесь от menu.clear().

Но он никогда не появляется в файле activity_main.xml.

Этого не должно быть. Он должен отображаться при запуске приложения, а не обязательно в редакторах других ресурсов.

И я также использую эмуляцию Nexus, у которой нет кнопки меню.

Конечно, были устройства Nexus с кнопками MENU. Попробуйте нажать PgUp; если вы получаете дополнительное меню, поднимающееся из нижней части экрана, ваш эмулятор имеет кнопку МЕНЮ.

person CommonsWare    schedule 05.06.2015
comment
Я думаю, что это идет в правильном направлении: я думаю, что Android Studio сделала проект совместимым со старыми версиями, и поэтому он использует appcompat. Где я могу указать, хочу ли я использовать собственную панель действий, а не компилировать с помощью appcompat? Я пытался изменить его на Android, но он говорит, что я должен использовать приложение. Я предполагаю, что есть место, где установлено значение appcompat. - person Lao Tse; 06.06.2015
comment
@SeadiMove: Где я могу указать, хочу ли я иметь встроенную панель действий, а не скомпилированную с помощью appcompat? -- удалить appcompat-v7 из списка dependencies в файле build.gradle вашего модуля. Удалите пространство имен app XML из ваших ресурсов меню и замените эти префиксы app на android. Сделайте так, чтобы ваша активность наследовалась от Activity вместо ActionBarActivity или AppCompatActivity. Пусть ваша тема (например, res/values/styles.xml) наследуется от чего-то другого, кроме темы AppCompat. Там может быть несколько других разных изменений, но это даст вам большую часть пути. - person CommonsWare; 06.06.2015
comment
На самом деле теперь это работает. Но не отображается в рендерере. Спасибо за Ваш ответ! Я также хотел бы знать, могу ли я настроить, чтобы приложение не было совместимо с очень поздними версиями. Я уже выбрал minSDK и targetSDK - person Lao Tse; 06.06.2015