一、系统菜单OptionsMenu
实现步骤:
首先在res创建menu文件夹存放菜单布局文件
在布局里边写每个菜单的Item
<?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/delt" android:title="删除" app:showAsAction="never"></item>
<item android:id="@+id/top" android:title="置顶"></item>
</menu>
1.Activity重写onCreateOptionsMenu加载资源文件
2.Activity重写onOptionsItemSelected加设置事件监听
public class MainActivity extends AppCompatActivity {
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.text);
}
//Activity重写onCreateOptionsMenu加载资源文件
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.option_menu,menu);
return super.onCreateOptionsMenu(menu);
}
//Activity重写onOptionsItemSelected加设置事件监听
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id){
case R.id.blue:
textView.setTextColor(Color.BLUE);
break;
case R.id.red:
textView.setTextColor(Color.RED);
break;
case R.id.green:
textView.setTextColor(Color.GREEN);
break;
}
return super.onOptionsItemSelected(item);
}
}
二、上下文菜单ContextMenu
实现步骤:
1.首先在res创建menu文件夹存放菜单布局文件,我们继续使用上边的menu布局
2.Activity重写onCreateConextMenu加载资源文件
3.Activity重写onConextItemSelected设置事件监听
4.为控件添加长按属性并将菜单绑定到这个控件上:registerForContextMenu(控件)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.text);
registerForContextMenu(textView);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
getMenuInflater().inflate(R.menu.option_menu,menu);
super.onCreateContextMenu(menu, v, menuInfo);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id){
case R.id.blue:
textView.setTextColor(Color.BLUE);
break;
case R.id.red:
textView.setTextColor(Color.RED);
break;
case R.id.green:
textView.setTextColor(Color.GREEN);
break;
}
return super.onContextItemSelected(item);
}
二、弹出菜单
实现步骤:
1:在res下面创建一个menu文件夹,并新建一个xml文件作为PoupMenu的布局文件。
2:把PopupMenu相关逻辑封装到showPopupMenu()方法中,包含PopupMenu的实例化、布局设置、显示、添加MenuItem的点击监听及响应等
3:为控件设置事件监听直接调用showPopupMenu()方法
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.pupo_tv);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showPopupMenu();
}
});
}
private void showPopupMenu() {
//1:创建对象
PopupMenu popupMenu = new PopupMenu(this, textView);
//2:记载布局
popupMenu.inflate(R.menu.popu_menu);
//3:事件监听
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
int id = item.getItemId();
switch (id){
case R.id.blue:
textView.setTextColor(Color.BLUE);
break;
case R.id.red:
textView.setTextColor(Color.RED);
break;
case R.id.green:
textView.setTextColor(Color.GREEN);
break;
}
return false;
}
});
//显示菜单
popupMenu.show();
}
弹出菜单默认在view的下方