Munes 菜单选项
- Options menu and action bar 选项菜单、显示到标题
- context menu
- Popup menu
Options menu and action bar
- 覆盖Activity的OnCreateOptionMenu(Menu mune)方法,当第一次被打开时调用。
- 调用Menu的add()方法添加菜单项(MenuItem),同时还可以调用MenuItem的selCon()方法来为菜单项设置图标。
- 当菜单项(MuneItem)被选择时,覆盖Activity的onOptionsItemSelected(MenuITem item)来响应事件。
两种方式:第一种,直接在java类文件中定义
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//用于创建选项菜单的事件方法,在打开界面时被自动调用
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//添加菜单项(组ID,当前选项ID,排序,标题)
menu.add(0,100,1,"设置游戏");
menu.add(0,200,2,"开始游戏");
menu.add(0, 300, 3, "退出游戏");
return true;
}
//菜单选项的单击事件处理
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
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;
}
return super.onOptionsItemSelected(item);
}
}
第二种方式:通过配置文件定义
/res/menu/文件下有配置文件
配置文件代码:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">
<item android:id="@+id/game_set"
android:title="游戏设置"
android:orderInCategory="1"
app:showAsAction="always"
android:icon="@android:drawable/ic_menu_set_as"/>
<item android:id="@+id/game_start"
android:title="游戏开始"
android:orderInCategory="2"
app:showAsAction="always"
android:icon="@android:drawable/ic_media_play"/>
<item android:id="@+id/game_quit"
android:title="游戏退出"
android:orderInCategory="3"
app:showAsAction="always"
android:icon="@android:drawable/ic_delete"
/>
</menu>
Activity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//用于创建选项菜单的事件方法,在打开界面时被自动调用
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//getMenuInflater() 获取一个菜单填充器
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
//菜单选项的单击事件处理
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
//获取索引值
int id = item.getItemId();
switch(id){
//通过索引值获取ID
case R.id.game_set:
Toast.makeText(this,"设置游戏",Toast.LENGTH_SHORT).show();
break;
case R.id.game_start:
Toast.makeText(this,"开始游戏",Toast.LENGTH_SHORT).show();
break;
case R.id.game_quit:
Toast.makeText(this,"退出游戏",Toast.LENGTH_SHORT).show();
break;
}
return super.onOptionsItemSelected(item);
}
}
Context menu上下文菜单
- 顾名思义,与上下文环境有关。类似于Windows中的右键单击弹出的快捷菜单,操作时需要长时间按住某个东东不放。一个界面只能有一个。
- 创建上下文菜单的步骤:
1.覆盖Activity的onCreateContextMune(Menu menu)方法,调用Menu的add()方法添加菜单项
- 覆盖Activity的onActivity的onContextItemSelected(MenuItem item)来响应事件
- 调用registerForeContextMenu()方法来为视图注册上下文菜单。
以下示例是根据ContextMenu菜单改变TextView的颜色:
//上下文菜单
public class Main2Activity extends AppCompatActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
textView = (TextView) findViewById(R.id.textview);
//注册上下文菜单到textview组件
registerForContextMenu(textView);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.menu_main2,menu);
}
//上下文菜单的单击事件
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.red:
textView.setBackgroundColor(Color.RED);
break;
case R.id.green:
textView.setBackgroundColor(Color.GREEN);
break;
case R.id.blue:
textView.setBackgroundColor(Color.BLUE);
break;
}
return true;
}
}
Popup menu 弹出式菜单
- 弹出式菜单是停靠在一个View上的模式菜单。如果View对象下方有空间,那么弹出菜单将显示在停靠对象的下方,否则显示在停靠对象的上方。这是非常有用的。
- 单击菜单单击事件继承接口PopupMenu.OnMenuItemClickListener
- 注意:弹出菜单是在API级别11和更高版本上才有效的。
public class Main3Activity extends AppCompatActivity implements PopupMenu.OnMenuItemClickListener{
private Button button_select;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
button_select = (Button) findViewById(R.id.button_select);
}
//单击按钮后的事件,单击按钮后需要跳出选择菜单
public void typeSizeClick(View v){
PopupMenu popupMenu = new PopupMenu(this,v);
//获取填充器
MenuInflater inflater = popupMenu.getMenuInflater();
inflater.inflate(R.menu.menu_main3,popupMenu.getMenu());
//填充器获取到菜单以后,需要需要设置子菜单的监听事件
//只能从这里获取,其他的地方没有这个参数
popupMenu.setOnMenuItemClickListener(this);
popupMenu.show();
}
//弹出式菜单单击事件
@Override
public boolean onMenuItemClick(MenuItem item) {
switch(item.getItemId()){
case R.id.s:
Toast.makeText(this,"你选择了s号",Toast.LENGTH_SHORT);
break;
case R.id.m:
Toast.makeText(this,"你选择了m号",Toast.LENGTH_SHORT);
break;
case R.id.l:
Toast.makeText(this,"你选择了l号",Toast.LENGTH_SHORT);
break;
}
return true;
}
}
网友评论