2018-06-05-Menu

Munes 菜单选项

  1. Options menu and action bar 选项菜单、显示到标题
  2. context menu
  3. Popup menu

Options menu and action bar

  1. 覆盖Activity的OnCreateOptionMenu(Menu mune)方法,当第一次被打开时调用。
  2. 调用Menu的add()方法添加菜单项(MenuItem),同时还可以调用MenuItem的selCon()方法来为菜单项设置图标。
  3. 当菜单项(MuneItem)被选择时,覆盖Activity的onOptionsItemSelected(MenuITem item)来响应事件。

两种方式:第一种,直接在java类文件中定义

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    //用于创建选项菜单的事件方法,在打开界面时被自动调用
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //添加菜单项(组ID,当前选项ID,排序,标题)
        menu.add(0,100,1,"设置游戏");
        menu.add(0,200,2,"开始游戏");
        menu.add(0, 300, 3, "退出游戏");

        return true;
    }


    //菜单选项的单击事件处理
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        switch(id){
            case 100:
                Toast.makeText(this,"设置游戏",Toast.LENGTH_SHORT).show();
                break;
            case 200:
                Toast.makeText(this,"开始游戏",Toast.LENGTH_SHORT).show();
                break;
            case 300:
                Toast.makeText(this,"退出游戏",Toast.LENGTH_SHORT).show();
                break;
        }


        return super.onOptionsItemSelected(item);
    }
}

第二种方式:通过配置文件定义
/res/menu/文件下有配置文件

配置文件代码:


    
    
    



Activity

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
      
    }

    //用于创建选项菜单的事件方法,在打开界面时被自动调用
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //getMenuInflater() 获取一个菜单填充器
        getMenuInflater().inflate(R.menu.menu_main, menu);
        
        return true;
    }


    //菜单选项的单击事件处理
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        
        //获取索引值
        int id = item.getItemId();
        switch(id){
            //通过索引值获取ID
            case R.id.game_set:
                Toast.makeText(this,"设置游戏",Toast.LENGTH_SHORT).show();
                break;
            case R.id.game_start:
                Toast.makeText(this,"开始游戏",Toast.LENGTH_SHORT).show();
                break;
            case R.id.game_quit:
                Toast.makeText(this,"退出游戏",Toast.LENGTH_SHORT).show();
                break;
        }


        return super.onOptionsItemSelected(item);
    }
}

Context menu上下文菜单

  • 顾名思义,与上下文环境有关。类似于Windows中的右键单击弹出的快捷菜单,操作时需要长时间按住某个东东不放。一个界面只能有一个。
  • 创建上下文菜单的步骤:

1.覆盖Activity的onCreateContextMune(Menu menu)方法,调用Menu的add()方法添加菜单项

  1. 覆盖Activity的onActivity的onContextItemSelected(MenuItem item)来响应事件
  2. 调用registerForeContextMenu()方法来为视图注册上下文菜单。

以下示例是根据ContextMenu菜单改变TextView的颜色:

//上下文菜单
public class Main2Activity extends AppCompatActivity {

    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        textView = (TextView) findViewById(R.id.textview);


        //注册上下文菜单到textview组件
        registerForContextMenu(textView);
    }

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

    }

    //上下文菜单的单击事件

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.red:
                textView.setBackgroundColor(Color.RED);
                break;
            case R.id.green:
                textView.setBackgroundColor(Color.GREEN);
                break;
            case R.id.blue:
                textView.setBackgroundColor(Color.BLUE);
                break;
        }
        return true;
    }
}

Popup menu 弹出式菜单

  • 弹出式菜单是停靠在一个View上的模式菜单。如果View对象下方有空间,那么弹出菜单将显示在停靠对象的下方,否则显示在停靠对象的上方。这是非常有用的。
  • 单击菜单单击事件继承接口PopupMenu.OnMenuItemClickListener
  • 注意:弹出菜单是在API级别11和更高版本上才有效的。
public class Main3Activity extends AppCompatActivity implements PopupMenu.OnMenuItemClickListener{

    private Button button_select;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);

        button_select = (Button) findViewById(R.id.button_select);

    }

    //单击按钮后的事件,单击按钮后需要跳出选择菜单
    public void typeSizeClick(View v){
        PopupMenu popupMenu = new PopupMenu(this,v);

        //获取填充器
        MenuInflater inflater = popupMenu.getMenuInflater();
        inflater.inflate(R.menu.menu_main3,popupMenu.getMenu());

        //填充器获取到菜单以后,需要需要设置子菜单的监听事件
        //只能从这里获取,其他的地方没有这个参数
        popupMenu.setOnMenuItemClickListener(this);

        popupMenu.show();

    }


    //弹出式菜单单击事件
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        switch(item.getItemId()){
            case R.id.s:
                Toast.makeText(this,"你选择了s号",Toast.LENGTH_SHORT);
                break;
            case R.id.m:
                Toast.makeText(this,"你选择了m号",Toast.LENGTH_SHORT);
                break;
            case R.id.l:
                Toast.makeText(this,"你选择了l号",Toast.LENGTH_SHORT);
                break;
        }
        return true;
    }
}



你可能感兴趣的:(2018-06-05-Menu)