Я новичок в Android SDK (не java), и у меня был вопрос о двух вариантах меню. Я осматриваю несколько учебников, в том числе разработчика. Моя проблема - это именование файлов. Меню прекрасно работает, когда в моей папке res/menu в меню xml-документ вызывается menu.xml. Если я попытаюсь позвонить в mainMenu.xml, я получу mainMenu не может быть разрешен или не является полем ошибка. Вот код в моей основной деятельности,
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mainMenu, menu);
return true;
}
"mainMenu" в R.menu.mainMenu в приведенном выше коде подчеркнуто красным цветом (ошибка) Итак, мой вопрос: могу ли я назвать свой файл меню чем-нибудь, что захочу? Этот способ, по-видимому, ограничивает меня одним вариантом меню для проекта, который не может быть прав (если я не пропущу что-то:)
У вас может быть несколько меню с несколькими вариантами: хотя может быть ограничение в нижнем регистре. Использовать подчеркивания, и все должно быть установлено?
EDIT: yep, это сообщение об ошибке возникает при попытке сборки:
[2011-05-20 12:09:40 - BlAH BLAH BLAH] res\menu\newMenu.xml: Invalid file name: must contain only [a-z0-9_.]
Итак, существует ограничение в нижнем регистре. Никогда не знал этого.
Проблема - это имя, которое вы выбрали для своего XML файла. Вот пример-вывод для файла с именем someName
:
res/menu/someName.xml: Неверный файл
name: должен содержать только [a-z0-9 _.]
Как вы можете видеть, ваш файл может содержать любые строчные символы, цифры, подчеркивание или период. Поскольку вы назвали свой файл mainMenu
, верхний регистр M
вызывает проблемы.
В общем, верблюжьей кейс для Android-ресурсов нецелесообразно, вы должны использовать змеиный футляр.
Кроме того, небольшая заметка о вашем onCreateOptionsMenu
-методе:
Контекст Activity уже предоставляет вам раздутие меню, вам не нужно его создавать:
@Override
public boolean onCreateOptionsMenu(Menu menu){
this.getMenuInflater().inflate(R.menu.main_menu, menu);
return super.onCreateOptionsMenu(menu);
}