亲宝软件园·资讯

展开

Android入门之Menu组件的使用教程详解

TGITCIC 人气:4

简介

Android有不同的菜单:

菜单的使用和我们前面说的AlertDialog很像。它可以支持自定义样式、也可以对菜单的点击事件进行绑定。

Android里有几个MainActivity事件可以覆盖,其中有以下几个事件就是用于处理Menu的。

课程目标

代码

前端代码

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:id="@+id/viewContext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="20dp"
        android:text="长按出context menu"
        android:textSize="18sp" />
 
    <TextView
        android:id="@+id/textColor"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="选择菜单改变颜色"
        android:textSize="18sp" />
 
 
    <Button
        android:id="@+id/btnShowMenu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textColor"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="10dp"
        android:text="展示弹出菜单" />
 
 
</RelativeLayout>

系统菜单

前端代码

不需要

后端代码

MainActivity.java

系统菜单涉及到两个方法的覆盖,因此只要在这两个方法把系统菜单设上,同时对系统菜单的“选择”事件做出自定义即可,在此我们通过系统菜单改变屏幕中一行字的字体颜色

//1.定义不同颜色的菜单项的标识:
  private final int RED = 101;
  private final int GREEN = 102;
  private final int BLUE = 103;
  private final int YELLOW = 104;
  private final int GRAY = 105;
  private final int CYAN = 106;
  private final int BLACK = 107;
@Override
 public boolean onCreateOptionsMenu(Menu menu) {
     // Inflate the menu; this adds items to the action bar if it is present.
     menu.add(1, RED, 4, "红色");
     menu.add(1, GREEN, 2, "绿色");
     menu.add(1, BLUE, 3, "蓝色");
     menu.add(1, YELLOW, 1, "黄色");
     menu.add(1, GRAY, 5, "灰色");
     menu.add(1, CYAN, 6, "蓝绿色");
     menu.add(1, BLACK, 7, "黑色");
     return true;
 }
 
 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
     int id = item.getItemId();
     switch (id) {
         case RED:
             textColor.setTextColor(Color.RED);
             break;
         case GREEN:
             textColor.setTextColor(Color.GREEN);
             break;
         case BLUE:
             textColor.setTextColor(Color.BLUE);
             break;
         case YELLOW:
             textColor.setTextColor(Color.YELLOW);
             break;
         case GRAY:
             textColor.setTextColor(Color.GRAY);
             break;
         case CYAN:
             textColor.setTextColor(Color.CYAN);
             break;
         case BLACK:
             textColor.setTextColor(Color.BLACK);
             break;
     }
     return super.onOptionsItemSelected(item);
 }

弹出菜单

前端代码

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/mcat" android:title="一只喵" />
    <item android:id="@+id/mdog" android:title="一只汪" />
</menu>

后端代码

   btnShowMenu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            PopupMenu popup = new PopupMenu(MainActivity.this,btnShowMenu);
            popup.getMenuInflater().inflate(R.menu.pop_menu, popup.getMenu());
            popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    switch (item.getItemId()){
                        case R.id.mcat:
                            Toast.makeText(MainActivity.this,"你轻拍了一下喵",
                                    Toast.LENGTH_SHORT).show();
                            break;
                        case R.id.mdog:
                            Toast.makeText(MainActivity.this,"你轻拍了一下汪",
                                    Toast.LENGTH_SHORT).show();
                            break;
                    }
                    return true;
                }
            });
            popup.show();
        }
    });
}

ContextMenu

前端

context_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:checkableBehavior="none">
        <item android:id="@+id/blue" android:title="@string/font_blue"/>
        <item android:id="@+id/green" android:title="@string/font_green"/>
        <item android:id="@+id/red" android:title="@string/font_red"/>
    </group>
</menu>

后端

我们可以看到这个ContextMenu是绑定在一个TextView上的。

viewContext=(TextView)findViewById(R.id.viewContext);
registerForContextMenu(viewContext);
 
   //重写上下文菜单的创建方法
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenu.ContextMenuInfo menuInfo) {
        MenuInflater inflator = new MenuInflater(this);
        inflator.inflate(R.menu.context_menu, menu);
        super.onCreateContextMenu(menu, v, menuInfo);
    }
    //上下文菜单被点击是触发该方法
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.blue:
                viewContext.setTextColor(Color.BLUE);
                break;
            case R.id.green:
                viewContext.setTextColor(Color.GREEN);
                break;
            case R.id.red:
                viewContext.setTextColor(Color.RED);
                break;
        }
        return true;
    }
}

加载全部内容

相关教程
猜你喜欢
用户评论