Android菜单栏的使用

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是它的静态方法。
效果截图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/mayifan_blog/article/details/86558778