Menu 和 context上下文的的理解



Menu 和 context上下文的的理解


一 、Menu 的理解:


1.在res中新建文件夹,命名为menu。


2. 新建xml文件  
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:tools="http://schemas.android.com/tools"
       tools:context=".MenuTest" >


    <item
        android:id="@+id/start"
        android:orderInCategory="100"
        android:title="开始"/>


    <item
        android:id="@+id/over"
        android:orderInCategory="200"
        android:title="结束"/>


</menu>


3.在activity上重写两个方法 
/*加载menu页面到组件上,创建菜单第一次被调用*/
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_test,menu);
        return true;
    }
    /*重写onOptionsItemSelected给选项添加点击事件*/
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.start:
                Toast.makeText(this, "开始", Toast.LENGTH_LONG).show();
                break;
            case R.id.over:
                Toast.makeText(this, "结束", Toast.LENGTH_LONG).show();
                break;
        }
        return true;
    }

4.如果要显示在Bar上,需要在xml里 添加属性 showAsAction=
其中有五个选择
ifRoom(如果有空间),never,always,withText(只显示文本,如果有图片的话),collapseActionView(收着)

5.<item>可以内嵌子菜单
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".MenuTest">


<item
android:id="@+id/start"
android:orderInCategory="100"
android:title="开始"
app:showAsAction="always"/>


<item
android:id="@+id/over"
android:orderInCategory="200"
android:title="结束"
app:showAsAction="collapseActionView"
>
<menu>
<item
android:id="@+id/subStart"
android:title="subStart"
android:orderInCategory="300"></item>
<item
android:id="@+id/subOver"
android:title="subOver"
android:orderInCategory="400"></item>


</menu>
</item>
</menu>

java文件只需要 在onOptionsItemSelected中把点击选项添加进来

6.也可以通过java文件直接创建menu,无需xml文件
public boolean onCreateOptionsMenu(Menu menu) {
30         // Inflate the menu; this adds items to the action bar if it is present.
31         //填充选项菜单(读取XML文件、解析、加载到Menu组件上)
32        // getMenuInflater().inflate(R.menu.main, menu);
33         
34         //通过代码的方式来添加Menu
35         //添加菜单项(组ID,菜单项ID,排序,标题)
36         menu.add(0, START_ITEM, 100, "Start");
37         menu.add(0, OVER_ITEM, 200, "Over");
38         //添加子菜单
39         SubMenu sub1 = menu.addSubMenu("setting");
40         sub1.add(1, SET_ITEM1, 300, "声音设置");
41         sub1.add(1, SET_ITEM2, 400, "背景设置");
42         
43         return true;
44     }


二、context menu上下文菜单的理解
长按某个item不放,弹出的 即为上下文context menu


1.三步:
1.重写OnCreateContextMenu(Menu menu),getInflater().inflater(res,menu)加载xml的资源
2.重写OnContextItemSelected(MenuItem item)给item添加点击事件
3.在onCreate中 registerForContextMenu(view)注册响应的view

  @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        getMenuInflater().inflate(R.menu.menu_test,menu);
    }


    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.start:
                Toast.makeText(this, "开始", Toast.LENGTH_LONG).show();
                break;
            case R.id.over:
                Toast.makeText(this, "结束", Toast.LENGTH_LONG).show();
                break;
        }
        return super.onContextItemSelected(item);
    }


  //为context menu注册事件
        registerForContextMenu(mListView);






猜你喜欢

转载自blog.csdn.net/qq_31756443/article/details/78798564