一:选项菜单
1.选项菜单的实现步骤:
(1)覆盖Activity的onCreateOptionsMenu(Menu menu)方法,当菜单第一次被打开时调用;
(2)调用Menu的add()方法添加菜单项(MenuItem),同时可以调用MenuItem的setIcon()方法来为菜单设置图片;
(3)当菜单项(MenuItem)被选择时,覆盖Activity的;onOptionsItemSelected(MenuItem item)来响应事件。
2.选项菜单的实现方法:
(1)使用代码方式:
①主要在onCreateOptionsMenu(Menu menu)使用menu.add()方法来添加菜单项;
②重写onOptionsItemSelected(MenuItem item)方法来实现单击菜单选项事件;
public class MenuTest extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu_test);
}
/**
* 菜单选项的单击事件处理
* @param item
* @return
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id=item.getItemId();
switch (id){
case 100:
Toast.makeText(this,"游戏开始!...",Toast.LENGTH_SHORT).show();
break;
case 200:
Toast.makeText(this,"设置游戏...",Toast.LENGTH_SHORT).show();
break;
case 300:
Toast.makeText(this,"游戏结束!...",Toast.LENGTH_SHORT).show();
break;
default:break;
}
return super.onOptionsItemSelected(item);
}
/**
* 用于创建选项菜单的事件方法,在打开界面时,会被自动调用
* @param menu
* @return
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//(组ID,选项ID,排序顺序,菜单项名称)
menu.add(0,100,1,"开始游戏");
menu.add(0,200,2,"游戏设置");
menu.add(0,300,3,"游戏结束");
return super.onCreateOptionsMenu(menu);
}
}
效果图:
(2)使用XML文件方式:(更推荐)
①需要在res目录下创建menu文件夹,创建xml文件作为菜单项;
②在代码中通过getMenuInflater().inflate(R.menu.menu_main,menu);
得到选项菜单;
③重写onOptionsItemSelected(MenuItem item)方法来实现单击菜单选项事件;
xml菜单文件:
<?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">
<!--
android:orderInCategory用来设置排列顺序,数字越小优先级越高
android:title用来设置菜单选项名称
app:showAsAction用来设置显示方式
android:icon用来设置选项图片
-->
<item
android:id="@+id/game_settings"
android:orderInCategory="100"
android:title="游戏设置"
app:showAsAction="ifRoom" />
<item
android:id="@+id/game_start"
android:orderInCategory="200"
android:title="游戏开始"
app:showAsAction="ifRoom" />
<item
android:id="@+id/game_end"
android:orderInCategory="300"
android:title="游戏结束"
app:showAsAction="ifRoom" />
</menu>
主类代码:
public class MenuTest extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu_test);
}
/**
* 菜单选项的单击事件处理
* @param item
* @return
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id=item.getItemId();
switch (id){
case R.id.game_start:
Toast.makeText(this,"游戏开始!...",Toast.LENGTH_SHORT).show();
break;
case R.id.game_settings:
Toast.makeText(this,"设置游戏...",Toast.LENGTH_SHORT).show();
break;
case R.id.game_end:
Toast.makeText(this,"游戏结束!...",Toast.LENGTH_SHORT).show();
break;
default:break;
}
return super.onOptionsItemSelected(item);
}
/**
* 用于创建选项菜单的事件方法,在打开界面时,会被自动调用
* @param menu
* @return
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main,menu);
return super.onCreateOptionsMenu(menu);
}
}
效果图:
xml文件中 app:showAsAction=”never”和”(1)使用代码方式一样”
xml文件中为app:showAsAction=”ifRoom”
xml文件中为app:showAsAction=”always”
二:上下文菜单
1.上下文菜单与上下文环境有关,类似于Windows中的右键单击弹出的快捷菜单,操作时需要长时间按住某个东西不放,之后会弹出菜单。
2.创建上下文菜单的步骤:
(1)覆盖Activity的onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)方法,调用Menu的add()方法添加菜单项(MenuItem);
(2)覆盖Activity的onContextItemSelected(MenuItem item)来响应事件;
(3)调用registerForContextMenu()方法来为视图注册上下文菜单。
3.代码简介:
menu xml文件:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/red"
android:orderInCategory="100"
android:title="红色"/>
<item
android:id="@+id/blue"
android:orderInCategory="200"
android:title="蓝色"/>
<item
android:id="@+id/green"
android:orderInCategory="300"
android:title="绿色"/>
</menu>
主类代码:
public class ContextMenuTest extends AppCompatActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_context_menu_test);
textView= (TextView) findViewById(R.id.textView_changeColor);
//注册上下文 菜单
registerForContextMenu(textView);
}
/**
* 创建上下文菜单的事件方法
* @param menu
* @param v
* @param menuInfo
*/
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
//也可使用menu.add()方法添加菜单项
getMenuInflater().inflate(R.menu.change_color,menu);
}
/**
* 上下文菜单的单击事件
* @param item
* @return
*/
@Override
public boolean onContextItemSelected(MenuItem item) {
int id=item.getItemId();
switch (id){
case R.id.red:
textView.setTextColor(Color.RED);
break;
case R.id.blue:
textView.setTextColor(Color.BLUE);
break;
case R.id.green:
textView.setTextColor(Color.GREEN);
break;
default:
break;
}
return super.onContextItemSelected(item);
}
}
效果图:
三:弹出式菜单
1.弹出菜单是停靠在一个View上的模式菜单。如果View对象下方有空间,那么弹出菜单将显示在停靠对象的下方,否则会显示在上方。
2.实现方法:
menu xml文件:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/small"
android:orderInCategory="100"
android:title="小号" />
<item
android:id="@+id/medium"
android:orderInCategory="200"
android:title="中号" />
<item
android:id="@+id/large"
android:orderInCategory="300"
android:title="大号" />
</menu>
主类代码:
public class PopupMenuTest extends AppCompatActivity {
private Button buttonSelected;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_popup_menu_test);
buttonSelected = (Button) findViewById(R.id.button);
}
/**
* 按钮的单击事件
*
* @param view
*/
public void typeSizeClick(View view) {
PopupMenu popupMenu=new PopupMenu(this,view);//直接创建PopupMenu弹出式菜单
MenuInflater inflater=popupMenu.getMenuInflater();//获取填充器
inflater.inflate(R.menu.popup_menu,popupMenu.getMenu());//填充菜单
//设置菜单选项的单击事件
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
int id=item.getItemId();
switch (id){
case R.id.small:
Toast.makeText(PopupMenuTest.this,"你选择了小号",Toast.LENGTH_SHORT).show();
break;
case R.id.large:
Toast.makeText(PopupMenuTest.this,"你选择了大号",Toast.LENGTH_SHORT).show();
break;
case R.id.medium:
Toast.makeText(PopupMenuTest.this,"你选择了中号",Toast.LENGTH_SHORT).show();
break;
default:break;
}
return true;
}
});
popupMenu.show();//切记show()
}
}
效果图: