1.系统菜单:
//使用系统菜单 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu,menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { switch (item.getItemId()){ case R.id.blue: Toast.makeText(this, "蓝色", Toast.LENGTH_SHORT).show(); break; case R.id.green: Toast.makeText(this, "绿色", Toast.LENGTH_SHORT).show(); break; case R.id.red: Toast.makeText(this, "红色", Toast.LENGTH_SHORT).show(); break; } return super.onOptionsItemSelected(item); }
在实现菜单时我们需要先重写一个onCreateOptionsMenu,在此方法里面找到自己写的布局文件,然后重写对应的onOptionsItemSelected,这个方法提供了一个MenuItem对象,我们在需要点击菜单里面选项做出相应的方法时,可以做一个switch选择器,括号里面的条件就可以咱们MenuItem对象调用getitemid(),通过选择不同的id在里面做出不同的方法。
2.上下文菜单:
//上下文菜单 @Override public boolean onContextItemSelected(@NonNull MenuItem item) { switch (item.getItemId()){ case R.id.green: button.setTextColor(Color.parseColor("#00ff00")); break; case R.id.blue: button.setTextColor(Color.parseColor("blue")); break; case R.id.red: button.setTextColor(Color.parseColor("red")); break; } return super.onContextItemSelected(item); } public void custom(View view) { Custompopwinodw custompopwinodw = new Custompopwinodw(this); custompopwinodw.showAsDropDown(button); }
这个方法同上面的上下文菜单非常相似,但是要将它绑定到相应的空间上就要在onCreate方法里实现注册(
registerForContextMenu();
)这个方法在上下文菜单中一定不能忘。
3.PopupMenu菜单:
//popmenu菜单 private void popmenu() { PopupMenu popupMenu = new PopupMenu(this,button); popupMenu.inflate(R.menu.menu); popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()){ case R.id.green: button.setTextColor(Color.parseColor("#00ff00")); break; case R.id.blue: button.setTextColor(Color.parseColor("blue")); break; case R.id.red: button.setTextColor(Color.parseColor("red")); break; } return false; } }); popupMenu.show(); }
要注意的是在实例化的时候()里面的两个参数,第一个是上下文,第二个是要显示的控件,然后用inflate方法获取自己写menu布局,写一个popumenu的点击事件和上面的方法一样。
4.popuwindow
//popuwindow private void popwindow() { final PopupWindow popupWindow = new PopupWindow(this); final View view = LayoutInflater.from(this).inflate(R.layout.item,null); view.findViewById(R.id.iv).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { popupWindow.dismiss(); } }); final TextView textView = view.findViewById(R.id.tv); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { textView.setText("我改变了"); } }); final WindowManager.LayoutParams layoutParams= getWindow().getAttributes(); layoutParams.alpha=0.5f; getWindow().setAttributes(layoutParams); popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { @Override public void onDismiss() { WindowManager.LayoutParams layoutParams1 = getWindow().getAttributes(); layoutParams1.alpha=1; getWindow().setAttributes(layoutParams1); } }); popupWindow.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); popupWindow.setHeight(ViewGroup.LayoutParams.MATCH_PARENT); popupWindow.setContentView(view); popupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.shape)); popupWindow.showAsDropDown(button,0,0); }
这个方法自己顶一个View对象获取布局,可以用这个对象获取到布局里面的控件,在获取完后写点击事件写相应的方法,这个方法可以设置当弹窗打开时背景透明需要WindowManager.LayoutParams layoutParams= getWindow().getAttributes();获取对象,再用对应的layoutParams.alpha写透明值,注意是float类型得数据。