Как добавить пункт меню в панель действий?

Я пытаюсь добавить пункт меню в панель действий. Меню / main.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/change_language"
        android:showAsAction="always"
        android:title="JP">
    </item>
    <item
        android:id="@+id/lists"
        android:icon="@android:drawable/ic_menu_agenda"
        android:showAsAction="always"
        android:title="Lists">
    </item>
    <item
        android:id="@+id/collections"
        android:icon="@android:drawable/ic_menu_star"
        android:showAsAction="ifRoom"
        android:title="Collections">
    </item>

</menu>

change_language, элементы списков работают отлично. Пункт меню "Коллекции" не отображается

MainActivity.java

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    menu.findItem(R.id.change_language).setTitle("JP");
    return true;
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

Это не дает никакой ошибки. Я проверил R.java. Там нет ссылки на "коллекции". Intellicence также не дает подсказок при написании "R.id". Как добавить пункт меню в панель действий? Может быть, это потому, что я опубликовал приложение в Google Play. Тем не менее, я установил для Debuggable значение true.

2 ответа

Решение

R.java не содержит id.collections, он содержит только main.xml, как это:

public static final class menu {
    public static final int main=0x7f0e0000;
}

Кроме того, публикация вашего приложения и эта проблема не связаны.

Где твое R.id.change_language? Если вы хотите создать собственную панель действий со значком и заголовком, вам нужно изменить main.xml и добавьте пользовательский макет, как показано ниже:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
    android:id="@+id/collection"
    android:actionLayout="@layout/your_custom_layout"
    android:showAsAction="ifRoom|withText"
    android:title="ActionBar"/>

</menu>

your_custom_layout.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<ImageView
    android:id="@+id/your_imageview"
    android:background="@android:drawable/ic_menu_star" />

<TextView 
    android:id="@+id/change_language"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

</RelativeLayout>

тогда ты можешь findViewById в onCreateOptionsMenu функция.

Надеюсь, что это может помочь!

Приведенный выше атрибут showAsAction использует пользовательское пространство имен, определенное в теге. Это необходимо при использовании любых атрибутов XML, определенных библиотекой поддержки, поскольку эти атрибуты не существуют в платформе Android на старых устройствах. Поэтому вы должны использовать свое собственное пространство имен в качестве префикса для всех атрибутов, определенных библиотекой поддержки.

Так что добавьте это в ваш тег ' xmlns:yourapp="http://schemas.android.com/apk/res-auto" '

и установите атрибут showAsAction следующим образом: yourapp:showAsAction="always" в ваших элементах

Другие вопросы по тегам