Android Binding - Introduction
回顾前面的几篇,我们都是直接在代码中添加菜单项,给菜单项分组等,这是比较传统的做法,它存在着一些不足。比如说,为了响应每个菜单项,我们需要用常量来保存每个菜单项的ID等。为此,Android提供了一种更好的方式,就是把menu也定义为应用程序的资源,通过android对资源的本地支持,使我们可以更方便地实现菜单的创建与响应。这一篇就介绍如何使用XML文件来加载和响应菜单,我们需要做这几步:
- 在/res目录下创建menu文件夹
- 在menu目录下使用与menu相关的元素定义xml文件,文件名是随意的,android会自动为其生成资源ID。例如:R.menu.mainmenu对应menu目录的mainmenu.xml资源文件
- 使用xml文件的资源ID,将xml文件中定义的菜单项添加到menu对象中
- 响应菜单项时,使用每个菜单项对应的资源ID
下面就使用xml的方式完成《Android菜单详解(二)——创建并响应选项菜单》中的options menu。
定义菜单资源文件
在res目录下创建menu文件夹,在menu下创建一个xml资源文件,我这里叫做mainmenu.xml
编写mainmenu.xml如下:
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- group1 -->
<group android:id="@+id/group1">
<item android:id="@+id/mi1"
android:title="item1"/>
<item android:id="@+id/mi2"
android:title="item2"/>
</group>
<!-- group 2 -->
<group android:id="@+id/group2">
<item android:id="@+id/mi3"
android:title="item3"/>
<item android:id="@+id/mi4"
android:title="item4"/>
</group>
</menu>
这里简单的添加了4个菜单项,并将其分为2组。item元素的android:title值可以引用values中的string资源。
使用MenuInflater添加菜单项
inflater在android中建立了从资源文件到对象的桥梁,MenuInflater即把菜单xml资源转换为对象并添加到menu对象中,它可以通过activity的getMenuInflater()得到。我们在MainActivity中重写onCreateOptionsMenu(...)方法。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mainmenu, menu);
return true;
}
响应菜单项
最后重写onOptionsItemSeleted(...)方法。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.mi1:
// do sth
break;
case R.id.mi2:
// do sth
break;
case R.id.mi3:
// do sth
break;
case R.id.mi4:
// do sth
break;
}
return true;
}
这一步最大的体现了使用XML生成菜单的好处。android不仅为我们定义的xml文件生成了资源ID,同样可以为group,menu item来自动生成ID(就像为布局中定义的view生成id那样)。这样菜单项ID的创建与管理就不用我们操心了,全部交给android去做吧!
至此,我们完成了一个简单的“使用XML生成菜单”的demo,并从中体会到了使用资源文件的好处,因此这是android中创建菜单的推荐方式。实际上,我们在代码中对菜单项或分组的操作都能在xml文件中完成,下面就简单介绍一些比较常用的功能。(谷歌提供的API demos中有最全面的示例)
更多菜单资源文件的功能
1.资源文件实现子菜单
子菜单通过在item元素中嵌套menu来实现。
<item android:title="系统设置">
<menu>
<item android:id="@+id/mi_display_setting"
android:title="显示设置"/>
<item android:id="@+id/mi_network_setting"
android:title="网络设置"/>
<!-- 别的菜单项 -->
</menu>
</item>
2.为菜单项添加图标
<item android:id="@+id/mi_exit"
android:title="退出"
android:icon="@drawable/exit"/>
3.设置菜单项的可选出现
使用android:checkableBehavior设置一组菜单项的可选策略,可选值为:none, all, single
<group android:id="..."
android:checkableBehavior="all">
<!-- 菜单项 -->
</group>
使用android:checked设置特定菜单项
<item android:id="..."
android:title="sometitle"
android:checked="true"/>
4.设置菜单项可用/不可用
<item android:id="..."
android:title="sometitle"
android:enabled="false"/>
5.设置菜单项可见/不可见
<item android:id="..."
android:title="sometitle"
android:visible="false"/>
结语
本篇是Android菜单详解系列的最后一篇,本系列详细介绍了android中各种常用菜单的使用技巧和注意事项,希望能帮助大家更好的理解,也期待与各位交流开发中的心得:)
作者: CodingMyWorld 发表于 2011-08-28 12:26 原文链接
发表评论
С транспортной компанией Азия-Трейдинг груз будет доставлен вовремя со всеми необходимыми согласованиями, разрешениями, сертификацией и таможенным оформлением.
VmiRhG You have made some decent points there. I looked on the web for more info about the issue and found most people will go along with your views on this site.
mMGaoF You made some decent points there. I looked on the internet for that problem and located most individuals will go together with with the web site.
fd5URG It'аs really a great and helpful piece of information. I'аm glad that you just shared this helpful information with us. Please stay us up to date like this. Thanks for sharing.
x1FilI Pretty nice post. I just stumbled upon your blog and wished to say that I have truly enjoyed browsing your blog posts. After all I will be subscribing to your feed and I hope you write again soon!
Доброго времени суток,
Азия Трейдинг, оказывает полный комплекс услуг по проведению таможенной очистки товаров,
Услуги декларирования за ЭЦП Клиента,
Услуги импортера по агентскому договору и договору поставки,
Выпуск товаров без корректировок,
Быстрый выпуск деклараций,
Работаем с многотоварными и сложными декларациями.
mail(at)msc.com.ru11
Лучшый тренер Бородин Сергей Александрович 20.01.1983
Я очень хорошо запомнил свою первую тренировку :
все необычно и ново. Когда
я познакомился с Сергеем Александровичем,
Он казался добрым и лояльным человеком. На первом занятии, Сергей Александрович на нас не сердился, так как
мы были неопытны,
а пытался во все обьяснить и помочь. Сергей Александрович
давал ответы на все наши вопросы, рассказывал о том, знаменитая игра,
которой посвящают баллады, песни, ради нее совершают
героические поступки.
На занятии
я себя чувствовал комфортно и уверенно. Сергей Александрович Бородин является, в первую очередь,
образованным человеком и личностью,который достиг в жизни определённой ступени. И не слушать то, что Сергей Александрович говорит- просто глупо.
Мой первый и лучший тренер Бородин Сергей Александрович 20.01.1983OppS!SORRY ME ))
No matter how you do it, losing weight is an individual thing. Friends can help you but they can't lose the weight for you. You've got to take charge of your weight loss from the beginning if you want to get serious about losing weight. The following tips will help.
What do you do for a living?
I'm in my first year at university
International directory enquiries
Could I ask who's calling?
Accountant supermarket manager
Insufficient funds
I'm about to run out of credit
Can I call you back?
Your cash is being counted
I'm interested in this position
What's the interest rate on this account?
I'd like to apply for this job
VNUBiF Thanks for an concept, you sparked at thought from a angle I hadn at given thoguht to yet. Now lets see if I can do something with it.
Согласен, что пост получился удачным. Хорошая работа!
Сенкс за инфу, почитал с интересом
I value the article.Thanks Again. Want more.
Really appreciate you sharing this article post.Really thank you! Will read on...
Здорово вы мне помогли. Честное слово, новыми красками все заиграло.
Очень понравилось, даже не ожидала.
Решил вам немного помочь и послал этот пост в социальные закладки
одумайтесь, многотысячная армия Ваших читателей не поймет Вас, не п1ростит!
Круто. Добавлю блог в избранное и друзьям посоветую. Ждите новых читателей :)
Отлично написано! Буду много думать
Достаточно интересная и познавательная тема
Только вчера об этом думал, так что пост как нельзя в тему!
Ваш пост навел меня на думки
Потрясающе! Хочется перечитывать снова и снова… Такие авторы сегодня большая редкость.Пока прочитал только эту одну запись, если и все остальное точно также хорошо, то автору респект
Распечатываю… на стенку в самое видное место!!!
Интересные посты - это ваш стиль безусловно!
как обычно радуешь нас своими лучшими фразами
Спасибо! Супер статья! Блог в ридер однозначно
Не понимаю причину такого ажиотажа. Ничего нового и мнения разные
И как это автору не влом столько времени на написание статей тратить, мы конечно очень благодарны, но вот я на такой альтруизм не способен
Соберем для Вас по сети интернет базу данных
Круто. Добавлю блог в избранное и друзьям посоветую. Ждите новых читателей :)
P.S. Сайт, кстати, у вас прикольно сверстан
Офигеть просто! Все, блин, всё знают, кроме меня
Где-то я что то подобное уже видел
Автор выйди к народу, вопросы есть!
Достаточно интересная и познавательная тема