三大菜单
1.系统菜单
2.上下文菜单
3.弹出菜单
系统菜单(OptionsMenu)
上下文菜单(ContextMenu)
弹出菜单(Popupmenu)
自定义菜单(MyMenu)
系统菜单(OptionsMenu)

右上角红色标注的就是系统菜单点击就会进入你所设置的内容

流程步骤
首先需要在res文件下创建一个Menu文件布局
// Menu布局以下的代码
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
>
<item android:id="@+id/item1" android:title="菜单一" >
<menu>
<item android:id="@+id/item2" android:title="菜单一的子菜单一" ></item>
<item android:id="@+id/item3" android:title="菜单一的子菜单二" ></item>
</menu>
</item>
</menu>
Activity代码需要重写两个方法 onCreateOptionsMenu() 和 onOptionsItemSelected()
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_layout,menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
switch (itemId){
case R.id.item1:
Toast.makeText(this, "我是菜单一", Toast.LENGTH_SHORT).show();
break;
case R.id.item2:
Toast.makeText(this, "我是菜单一的子菜单一", Toast.LENGTH_SHORT).show();
break;
case R.id.item3:
Toast.makeText(this, "我是菜单一的子菜单二", Toast.LENGTH_SHORT).show();
break;
}
return super.onOptionsItemSelected(item);
}
上下文菜单(ContextMenu)

Activity代码需要重写两个方法 onCreateContextMenu() 和 onContextItemSelected()
// An highlighted block
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.menu_layout,menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
int itemId = item.getItemId();
switch (itemId){
case R.id.item1:
Toast.makeText(this, "我是菜单一", Toast.LENGTH_SHORT).show();
break;
case R.id.item2:
Toast.makeText(this, "我是菜单一的子菜单一", Toast.LENGTH_SHORT).show();
break;
case R.id.item3:
Toast.makeText(this, "我是菜单一的子菜单二", Toast.LENGTH_SHORT).show();
break;
}
return super.onContextItemSelected(item);
}
弹出菜单(PopupMenu)

需要给TextView或者按钮添加点击事件去触发弹出菜单
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showpop();
}
});
Activity代码需要设置监听 opopupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener()) ;
// An highlighted block
public void showpop() {
PopupMenu popupMenu = new PopupMenu(this,textView,Gravity.CENTER);
popupMenu.inflate(R.menu.menu_layout);
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
int itemId = item.getItemId();
switch (itemId){
case R.id.item1:
Toast.makeText(MainActivity.this, "我是菜单一", Toast.LENGTH_SHORT).show();
break;
case R.id.item2:
Toast.makeText(MainActivity.this, "我是菜单一的子菜单一", Toast.LENGTH_SHORT).show();
break;
case R.id.item3:
Toast.makeText(MainActivity.this, "我是菜单一的子菜单二", Toast.LENGTH_SHORT).show();
break;
}
return false;
}
});
popupMenu.show();
}
自定义菜单(MyMenu)

顶部的item3和item4为自定义Menu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//先找到menu布局下面的布局与menu
getMenuInflater().inflate(R.menu.menu,menu);
//给自定义item配对自定义布局
MenuItem item = menu.findItem(R.id.item3);
//通过item找到对应的控件
item.setActionView(R.layout.activity_button1);
ImageView img = item.getActionView().findViewById(R.id.menu3);
final TextView tv = item.getActionView().findViewById(R.id.menutext);
//给找到的控件添加信息
img.setImageResource(R.drawable.like);
tv.setText("20");
//给图片添加监听点一次图片textView增加一次模拟点赞
img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String s = tv.getText().toString();
int a=Integer.parseInt(s);
a++;
tv.setText(a+"");
}
});
MenuItem item1 = menu.findItem(R.id.item4);
item1.setActionView(R.layout.activity_button1);
ImageView img1 = item1.getActionView().findViewById(R.id.menu3);
final TextView tv1 = item1.getActionView().findViewById(R.id.menutext);
img1.setImageResource(R.drawable.vview);
tv1.setText("20");
img1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String s = tv1.getText().toString();
int a=Integer.parseInt(s);
a++;
tv1.setText(a+"");
}
});
return super.onCreateOptionsMenu(menu);
}
本文介绍了Android中的三种主要菜单类型:系统菜单(OptionsMenu),上下文菜单(ContextMenu)和弹出菜单(PopupMenu)。系统菜单位于右上角,通过设置Menu文件布局并在Activity中重写onCreateOptionsMenu()和onOptionsItemSelected()方法实现。上下文菜单需要重写onCreateContextMenu()和onContextItemSelected()。弹出菜单由TextView或按钮触发,通过设置OnMenuItemClickListener显示。此外,还提到了自定义菜单(MyMenu)的使用。
177

被折叠的 条评论
为什么被折叠?



