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 原文链接
发表评论
Спасибо вам за сайт, очень полезный ресурс, мне ВСЁ-ВСЁ-ВСЁ здесь очень нравится…
Здравствуйте! Прошу прощения, что пишу не совсем в тему. Я тоже использую Вордпресс для своего блога и у меня возник вопрос, как настроить новую тему. Поиск на официальном сайте ничего не дал, там только пользовательские настройки рассматривают, а мне нужно, видимо, шаблоны править. Не подскажете, где почитать?
Оригинальная идея. Интересно сколько времени он на это потратил
А я считаю, что все это верно и очень точно подмечено!
Очень понравилось, даже не ожидала.
Распечатываю… на стенку в самое видное место!!!
Вот что-то подобное у меня уже неделю из головы не выходит!
Полностью согласна!
Соберем для Вас по сети интернет базу данных
Подписался на RSS, буду следить =)
Подскажите, можно ли разместить на своем сайте данный пост?
Спасибо за статью, всегда рад почитать вас!
Спасибо, много полезного почерпнул.
Очень интересно, но все в будущем хотелось бы еще побольше узнать об этом
Очень интересно. Но чего-то не хватает. Может быть, стоит добавить каких-нибудь картинок или фото?
Сенкс. Интересно, и вообще полезный у Вас блог
Можно и поспорить по этому вопросу, ведь только в споре может родиться истина.
Пока прочитал только эту одну запись, если и все остальное точно также хорошо, то автору респект
Интересно, я даже и не думала об этом
Занятно! Реально просто отлично написано. :)
Довольно интересно конечно. Я не могу подписаться под каждым вашим словом, но в общем соглашусь.
Автор, а у вас никто записи не тырит? А то у меня заколебали уже - копируют и копируют. И главное, что даже ссылку никто не удосужится поставить.
Только не очень могу понять как часто обновляется ваш блог
Хорошо пишете. Надеюсь, когда-нибудь увижу нечто подобное и на своем блоге…
P.S. Сайт, кстати, у вас прикольно сверстан
Где-то я это уже видел… А если по теме то спасибо.
Пост понравился, пишите еще. Я с удовольствием прочту.
Хорошая статья. Краткость явно Ваша сестра
Здорово вы мне помогли. Честное слово, новыми красками все заиграло.
Респект-уважуха афтору!
Достаточно интересная и познавательная тема
не информативно как- то
Слушайте, давайте махнем в ближайшие выходные за город и там все это обсудим. Вы ведь из Москвы?
Респект-уважуха афтору!
я бы кое-что добавила, но по сути сказано все
Я бы сказала о монументальности, грандиозности некоторых сюжетов
Блин ну почему, почему когда продавщица в магазине нахамит, смешной ответ придумывается только на полпути домой!
я бы сказал не интересно, а разумно
Что то слишком мудрено… И по-моему расчитано на блогера чем на вебмастера
Спасибо за статью, всегда рад почитать вас!
Это интересно и познавательно и поэтому я с удовольствием пойду дальше в развитии этой темы
не уверена что это так) хотя спасиб
Даже и не придерешься!
stuff for make money HERE
bank logins (for sale and for cashout), ohter accts like poker etc
paypal ebay mb neteller etc
cvvs:
Usa - 3-6 usd per 1
EU, Asia - 15-17 usd per 1
AU GB- 10-15 usd per 1
СС+VBV code avalible for sale
fullz
SSN+DOB 6$
Full info for person(full background - Autos,Real property,Relatives etc.) - $25
Driver Licence(MANUAL/Ручной поиск) - 15$
Business Report (FEIN SEARCH) - 35$
Credit report - $30
Employer Info - 15$
Motor Vehicle - 15$
Real Property - 15$
Dumps:
USA 25-40 usd per 1
Canada 40-55 usd per 1
EU and World: (101) 100-120 usd per 1
EU and World: (201) 70-90 usd per 1
decode ur wav to tr2
fake id and docks
clean plastic
skimmers
sell botnerts (citadel builds)
traffic & loads
winlocker
injects, ATS
Terms of work:
- LR (best way, no any min order), wmz, wu (drop fee), mg (drop fee)
- Dumps (track2+track1 (sometimes) without pin (dont waste time for talk shit).
- Sending stuff withing 24 hours after full payment received (depend how i busy, sometimes at once).
- replace time for non checked ccs and dumps - 24h
- Dont have min order, but if u use wu or mg drop fee 8% but not less then 50 usd. i use drop service only
Support: 610542994
jabber dollarservice@jabber.se
mail: dollar_servicenum1@yahoo.com
yahoo messenger (dollar_servicenum1)Действительно удивили и порадовали Никогда не поверил бы, что даже такое бывает
Это интересно и познавательно и поэтому я с удовольствием пойду дальше в развитии этой темы
Довольно интересно конечно. Я не могу подписаться под каждым вашим словом, но в общем соглашусь.
прочитав несколько статей на эту тему понял
Отлично!!! Вместо книги на ночь.
Не блог, а поток хороших новостей. Как у вас так получается?