Как добавить пункт меню в панель действий?
Я пытаюсь добавить пункт меню в панель действий. Меню / 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" в ваших элементах