strings.xml
xml文件使用的是可扩展标记语言,它并不是用来显示数据,而是用来传输数据的。在Android的开发设计中,xml文件和activity中的代码逻辑得到了分离,使得程序更加便于理解和修改。strings.xml文件中存放的是字符串的键值对,通过字符串来索引字符串,键是唯一的,且一个键仅有唯一的一个对应的字符串。代码如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">菜单练习</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>
<string name="action_delete">删除</string>
<string name="add">添加</string>
<string name="find">查找</string>
<string name="more">更多</string>
<string name="submenu">submenu</string>
</resources>
先看第一条string键值对,在使用的时候是通过app_name作为参数来查找“菜单练习”这个名称,好处就是在逻辑代码中完全不会出现“菜单练习”这四个字,如果想要修改名称只要在xml中文件修改即可,这符合设计模式中避免修改代码的原则。当想要调用“菜单练习”,只要用@string/app_name就可以了。当然多个不同的键指向同一个值也是可以的。
main.xml
这个xml文件存储的内容是MainActivity中的菜单栏信息。代码如下:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/delete"
android:showAsAction="always"
android:title="@string/action_delete"/>
<item
android:id="@+id/find"
android:showAsAction="always|withText"
android:title="@string/find"/>
<item
android:id="@+id/add"
android:showAsAction="always"
android:title="@string/add"/>
<item
android:id="@+id/more"
android:orderInCategory="100"
android:showAsAction="always"
android:title="更多">
<menu>
<item
android:id="@+id/name"
android:showAsAction="always|withText"
android:title="学长"/>
<item
android:id="@id/name"
android:showAsAction="always|withText"
android:title="学姐"/>
<item
android:id="@id/name"
android:showAsAction="always|withText"
android:title="学弟"/>
</menu
</item>
</menu>
什么是menu?什么是item?
menu是指菜单,item是条目。menu中可以有若干item,item可以存放一个menu来展开得到更多item。
代码的结构:主要是通过menu和item以及若干尖括号和斜杠实现层次的划分。
1、
< menu
........(若干item)
< / menu>
实现了一个menu。
2、
如果需要对menu进行配置,要加上一些信息。那么代码如下:
<menu .........(menu补充信息)........>
.......(若干item)
< / menu>
3、
< item
.......(item配置)...... />
实现了一个item。
4、
< item
.......(item配置)....... >
< menu
......(menu内容)
< /menu >
< /item >
实现了item中嵌套menu,注意item配置内容后使用的是>符号
@id和@+id的区别:@id是指对已经存在的引用进行操作,比如,@id/name表示获得name对应的id值。@+id是对不存在的引用进行操作,执行这条语句就会人为添加引用,比如@+id/name表示在R文件中添加一条新的id,它的名称是name。
showAsAction的若干参数配置:
①、always:无论是否溢出,总会显示在ActionBar。
②、never:使菜单项从不显示在ActionBar上,只会在溢出列表中显示。
③、ifRoom:如果有空间可以显示在ActionBar上,如果空间不足会显示在溢出列表中。
④、withText:图标和文本一起显示,但当图标有效且空间不足,文本可能显示不全。
MainActivity
代码:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
* 创建菜单项目
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
/**
* 处理菜单被选中后的后续处理
*/
public boolean onOptionsItemSelected(MenuItem munItem){
String s = munItem.getTitle().toString();//获取选中的标题的字符串
switch (munItem.getItemId()) {
case R.id.delete:
Toast.makeText(this, "你选中了"+s, Toast.LENGTH_LONG).show();//Toast浮动显示提示信息,不获得焦点
return true;
case R.id.add:
Toast.makeText(this, "你选中了"+s, Toast.LENGTH_LONG).show();
return true;
case R.id.find:
Toast.makeText(this, "你选中了"+s, Toast.LENGTH_LONG).show();
return true;
case R.id.name:
Toast.makeText(this, "你选中了"+s, Toast.LENGTH_LONG).show();
return true;
default:
return super.onOptionsItemSelected(munItem);
}
}
}
分析:这里关键是两个方法,一个是创建菜单的方法,另一个是对菜单操作的应答方法。当点击了某个item的时候,就根据它的id进行匹配,输出对应的title。Toast用于显示浮动信息,不获得焦点,makeText是它的静态方法。
效果截图: