关于Menu的几个重要的方法,都是Activity的方法;
- onCreateOptionsMenu(Menu menu)
每次Activity一创建就会执行,一般只执行一次; - onPrepareOptionsMenu(Menu menu)
每次menu被打开时,该方法就会执行一次; - onOptionsItemSelected(MenuItem item)
每次menu菜单项被点击时,该方法就会执行一次; - invalidateOptionsMenu()
刷新menu里的选项里内容,它会调用onCreateOptionsMenu(Menu menu)方法 - onCreateContextMenu()
创建控件绑定的上下文菜单menu,根据方法里的View参数识别是哪个控件绑定 - onContextItemSelected(MenuItem item)
点击控件绑定的上下菜单menu的内容项
一、Menu标题菜单项创建
- 在Android工程目录下的res包下,右键选择New菜单项下的Android resource directory,并以menu命名文件夹的名字;
- 右键menu文件夹,选择Menu resource file选项,创建main_menu.xml文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/openMenu" android:title="打开"/>
<item android:id="@+id/closeMenu" android:title="关闭"/>
</menu>
效果图
- 在Activity中重写三个方法
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
Log.i("dayang","打开Menu时执行该方法");
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
Log.i("dayang","onCreateOptionsMenu");
//创建Menu菜单
getMenuInflater().inflate(R.menu.main_menu,menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Log.i("dayang","选择列表项时执行------------");
//对菜单项点击内容进行设置
int id = item.getItemId();
if (id == R.id.openMenu) {
Toast.makeText(this,"打开文件",Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this,"关闭文件",Toast.LENGTH_SHORT).show();
}
return super.onOptionsItemSelected(item);
}
效果图
二、创建上下文菜单项
registerForContextMenu(View view)绑定相关点击控件长按出菜单项
效果图1
效果图2
1.创建main_menu2.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu1" android:title="呵呵哒"></item>
<item android:id="@+id/menu2" android:title="滴滴"></item>
<item android:id="@+id/menu3" android:title="喔喔"></item>
</menu>
2.创建的Activity的布局xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/etMenu1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="快来长按我" />
<EditText
android:id="@+id/etMenu2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="快来长按我2" />
</LinearLayout>
3.创建的Activity,设置控件长按事件
public class ContextActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_context);
EditText et1= (EditText) findViewById(R.id.etMenu1);
EditText et2= (EditText) findViewById(R.id.etMenu2);
registerForContextMenu(et1);
registerForContextMenu(et2);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
if(v.getId()==R.id.etMenu1){
getMenuInflater().inflate(R.menu.main_menu,menu);
}else if(v.getId()==R.id.etMenu2){
getMenuInflater().inflate(R.menu.main_menu2,menu);
}
}
@Override
public boolean onContextItemSelected(MenuItem item) {
return true;
}}