安卓学习之路之菜单Menu

1,Menu

菜单的分类;OptionsMenu 绑定在系统上,不用自己收到注册.

ContextMenu,PopupMenu

绑定到控件上,需要进行注册.

使用菜单的步骤

1.在res--->menu创建布局代码如下

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      xmlns:tools="http://schemas.android.com/tools"
      tools:context=".MainActivity">
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:title="@string/action_settings"
        app:showAsAction="never"/>

  //这是是一个二级菜单  
    <item
        android:id="@+id/item1"
        android:orderInCategory="2"
        android:title="item1"
        app:showAsAction="never"
        >

        <menu>
            <item
                android:id="@+id/item4"
                android:title="item4"
                />
            <item
                android:id="@+id/item5"
                android:title="item5"
                />
            <item
                android:id="@+id/item6"
                android:title="item6"
                />
        </menu>
    </item>
    //以上是一个二级的菜单
    <item
        android:id="@+id/item2"
        android:orderInCategory="3"
        android:title="item2"
        app:showAsAction="never"
        />
    <item
        android:id="@+id/item3"
        android:orderInCategory="4"
        android:title="item4"
        app:showAsAction="never"
        />
</menu>
2.就是在java的代码中把xml文件的布局加载到菜单项上代码如下

1.OptionsMenu的加载和点击事件代码如下

    @Override
      public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
<pre name="code" class="java"> @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.item1:
                Toast.makeText(this, item.getTitle().toString(), Toast.LENGTH_SHORT).show();
                break;
            case R.id.item2:
                Toast.makeText(this, item.getTitle().toString(), Toast.LENGTH_SHORT).show();
                break;
            case R.id.item3:
                Toast.makeText(this, item.getTitle().toString(), Toast.LENGTH_SHORT).show();
                break;
            case R.id.action_settings:
                Toast.makeText(this, item.getTitle().toString(), Toast.LENGTH_SHORT).show();
                break;
        }

        return super.onOptionsItemSelected(item);
    }


 2. 
ContextMenu上下文菜单的加载和点击事件的代码如下 

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (ListView) findViewById(R.id.lv);
        getdata();

        adapter = new ArrayAdapter<List<String>>(MainActivity.this, android.R.layout.simple_list_item_1);
        adapter.add(list);
        lv.setAdapter(adapter);
        //将上下文菜单注册到listview上
        registerForContextMenu(lv);


    }

    public void getdata() {
        list = new ArrayList<>();
        for (int i = 0; i < 40; i++) {
            list.add("item" + i);
        }
    }

    /**
     * 
     * @param menu
     * @param v
     * @param menuInfo
     */
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        //把xml文件里的布局加载到menu上
        getMenuInflater().inflate(R.menu.menu_main, menu);
    }
<pre name="code" class="java"> @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()) {


            case R.id.item1:

                AdapterView.AdapterContextMenuInfo adapterContextMenuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
                list.remove(adapterContextMenuInfo.position);
                adapter.notifyDataSetChanged();
                Toast.makeText(this, "删除", Toast.LENGTH_SHORT).show();
                break;


            case R.id.item2:
                Toast.makeText(this, "分享", Toast.LENGTH_SHORT).show();
                break;
        }


        return super.onContextItemSelected(item);
    }
}


 3. 
PopupMenu的加载和点击事件的代码如下  
 public  void  onclick(View view) {
       PopupMenu popupMenu = new PopupMenu(this, view);
       getMenuInflater().inflate(R.menu.menu_main, popupMenu.getMenu());
       popupMenu.show();

       popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
           @Override
           public boolean onMenuItemClick(MenuItem item) {

               switch (item.getItemId()) {
                   case R.id.item1:
                       Toast.makeText(MainActivity.this, item.getTitle().toString(),Toast.LENGTH_SHORT).show();
                       break;
                   case R.id.item2:
                       Toast.makeText(MainActivity.this, item.getTitle().toString(),Toast.LENGTH_SHORT).show();
                       break;
               }
               return false;
           }

       });
   }
}
 但是在安卓引入 
ActionBar之后就很少使用了.以后还会写关于 
ActionBar的使用.. 







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值