Menu菜单
菜单类型 | 显示菜单 | 事件监听 |
---|---|---|
系统菜单 | onCreateOptionsMenu | onOptionItemSelectd |
上下文菜单 | onCreateConextMenu | onConextItemSelected |
- 系统菜单OptionsMenu (效果+具体实现)
- 在res资源文件下创建一个menu文件夹,并创建一个xml文件作为OptionsMenu的布局文件,效果如下:
- 在该文件下写入每个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/blue" android:title="蓝色" app:showAsAction="never" ></item>
<item android:id="@+id/red" android:title="红色" > </item>
<item android:id="@+id/green" android:title="绿色" ></item>
</menu>
- 重写onCreateOptionsMenu加载资源文件和onOptionsItemSelectd设置事件监听两个方法,代码如下:
@Override
// 加载资源文件
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.layout,menu);
return super.onCreateOptionsMenu(menu);
}
@Override
// 设置事件监听
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.blue:
textView.setTextColor(Color.parseColor("#2239A2"));
break;
case R.id.green:
textView.setTextColor(Color.parseColor("#1BA233"));
break;
case R.id.red:
textView.setTextColor(Color.parseColor("#A21C31"));
break;
}
return super.onOptionsItemSelected(item);
}
这样我们就完成的上面的效果图
- 上下文菜单ContextMenu (效果+具体实现)
- 在res资源文件下创建一个menu文件夹,并创建一个xml文件作为OptionsMenu的布局文件(与系统菜单一样)
- 重写onCreateConextMenu加载资源文件和onConextItemSelected设置事件监听两个方法,代码如下:
@Override
// 加载资源文件
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
getMenuInflater().inflate(R.menu.layout,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.parseColor("#2239A2"));
break;
case R.id.green:
textView.setTextColor(Color.parseColor("#1BA233"));
break;
case R.id.red:
textView.setTextColor(Color.parseColor("#A21C31"));
break;
}
return super.onContextItemSelected(item);
}
- 为控件添加长按属性并将菜单绑定到这个控件上:registerForContextMenu(控件)
public class Main2Activity extends AppCompatActivity {
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
textView = findViewById(R.id.textview);
// 为控件添加长按属性并将菜单绑定到这个控件上
registerForContextMenu(textView);
}
这样我们就完成的上面的效果图
- 弹出菜单 (效果+具体实现)
- 在res资源文件下创建一个menu文件夹,并创建一个xml文件作为PopupMenu的布局文件(与系统菜单一样)
- 设置点击监听以及点击后的功能方法,代码如下:
public class Main3Activity extends AppCompatActivity {
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
textView = findViewById(R.id.textview);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showPopupMenu();
}
});
}
- 功能代码的实现,代码如下:
public void showPopupMenu(){
PopupMenu popupMenu = new PopupMenu(Main3Activity.this,textView);
// 加载布局
popupMenu.inflate(R.menu.layout);
// 事件监听
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
int id=item.getItemId();
switch (id){
case R.id.blue:
textView.setTextColor(Color.parseColor("#2239A2"));
break;
case R.id.green:
textView.setTextColor(Color.parseColor("#1BA233"));
break;
case R.id.red:
textView.setTextColor(Color.parseColor("#A21C31"));
break;
}
return false;
}
});
// 显示
popupMenu.show();
}
这样我们就完成的上面的效果图
以上就是我对菜单所掌握的知识与内容