Android菜单(menu)

时间:2023-03-09 14:41:29
Android菜单(menu)

Android  菜单

我们继续来进行学习,今天写一下在软件中用的还算较多的菜单。

1、Menu

菜单,很显然,作用就是点击不同的选项触发不同的方法。现在在安卓使用中推荐使用ActionBar,但这里我们还是对菜单进行一个简单的解释。

菜单主要分为三类,选项菜单(Option Menu)、上下文菜单(Context Menu)和子菜单(Sub Menu),下面我们就一个一个来看一下。

(1)选项菜单

当用户单击软件上的菜单按钮,触发事件弹出的菜单框就是选项菜单。

这是效果图

Android菜单(menu)

先是布局代码

布局为在res文件夹下新建一个menu文件夹,在此文件夹下建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">
<item
android:id="@+id/mune_enter"
android:orderInCategory="100"
android:title="选项一"
app:showAsAction="never"/>
<item
android:id="@+id/mune_setting"
android:orderInCategory="100"
android:title="选项二"
app:showAsAction="never"/>
<item
android:id="@+id/mune_out"
android:orderInCategory="100"
android:title="选项三"
app:showAsAction="never"/>
</menu>

解释一下其中一些属性

  • showAsAction 主要是针对这个菜单的显示起作用的,它有三个可选项
  1. always:总是显示在界面上
  2. never:不显示在界面上,只让出现在右边的三个点中
  3. ifRoom:如果有位置才显示,不然就出现在右边的三个点中

下面是java代码

public class MainActivity extends AppCompatActivity {

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//导入菜单布局
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
} //这里是点击菜单项的触发事件
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.mune_enter:
Toast.makeText(this, "点击选项一", Toast.LENGTH_SHORT).show();
break;
case R.id.mune_setting:
Toast.makeText(this, "点击选项二", Toast.LENGTH_SHORT).show(); break;
case R.id.mune_out:
Toast.makeText(this, "点击选项三", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
} }

(2)上下文菜单

当用户长按Activity页面时,弹出的菜单被称为上下文菜单。一般情况下ContextMenu常用于ListView或者GridView。

效果图

Android菜单(menu)

先是布局文件

这里的布局就是下载layout中,父布局为FrameLayout

 <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"> <ListView
android:id="@+id/mune_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</ListView> </FrameLayout>

这里没什么要说的,直接看下面。

java代码

public class MainActivity extends AppCompatActivity {

    private ListView listview;

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//加载数据
showListView();
// 注册上下文菜单
this.registerForContextMenu(listview);
}
//加载数据
private void showListView() {
listview = (ListView) findViewById(R.id.mune_list);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, getDate());
listview.setAdapter(adapter);
}
//创建数据源
private ArrayList<String> getDate() {
ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < 10; i++) {
list.add("菜单" + i);
}
return list;
}
//添加上下文菜单的菜单项
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenu.ContextMenuInfo menuInfo) {
menu.setHeaderTitle("上下文菜单");
//加载上下文菜单内容
menu.add(1, 1, 1, "选项一");
menu.add(1, 2, 1, "选项二");
menu.add(1, 3, 1, "选项三");
super.onCreateContextMenu(menu, v, menuInfo);
}
//创建单击事件
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 1:
Toast.makeText(this, "点击选项一", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(this, "点击选项二", Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(this, "点击选项三", Toast.LENGTH_SHORT).show();
break; default:
break;
}
return super.onContextItemSelected(item);
}
}

 (3)子菜单

它就是将功能相同的操作进行分组显示,作用在选项菜单上,是选项菜单的二级菜单

效果图

Android菜单(menu)

先上布局文件

其实布局文件中可以什么都没有

 <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SubMenu"
android:textSize="20dp" /> </FrameLayout>

然后是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) {
SubMenu fileMenu = menu.addSubMenu("查看");
SubMenu editMenu = menu.addSubMenu("输入");
//添加菜单项
fileMenu.add(1, 1, 1, "查看1");
fileMenu.add(1, 2, 1, "查看2");
fileMenu.add(1, 3, 1, "查看3");
editMenu.add(2, 1, 1, "输入1");
editMenu.add(2, 2, 1, "输入2");
editMenu.add(2, 3, 1, "输入3");
return super.onCreateOptionsMenu(menu);
}
//创建点击事件
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getGroupId() == 1) {
switch (item.getItemId()) {
case 1:
Toast.makeText(this, "点击了查看1", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(this, "点击了查看2", Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(this, "点击了查看3", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
} else if (item.getGroupId() == 2) {
switch (item.getItemId()) {
case 1:
Toast.makeText(this, "点击了输入1", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(this, "点击了输入2", Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(this, "点击了输入3", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
return super.onOptionsItemSelected(item);
}
}

上面就是菜单的用法了。。。。。。。

说一下ContextMenu与OptionMenu的区别:

  • 1、OptionMenu对应的是activity,一个activity只能拥有一个选项菜单;
  • 2、ContextMenu对应的是view,每个view都可以设置上下文菜单;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~