因为总是忘,所以记下来!!!
使用菜单,首先要在res目录下创建menu目录,并创建相应的menu资源文件(以main为例),声明命名空间:
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
app命名空间主要规定图标显示规则
<item
android:id="@+id/test1"
android:title="测试"
android:orderInCategory="100"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/test2"
android:title="@string/test"
android:orderInCategory="100"
app:showAsAction="never"/>
<item
android:id="@+id/test3"
android:title="@string/test"
android:icon="@drawable/ic_launcher_foreground"
android:orderInCategory="100"
app:showAsAction="always"/>
<item
android:id="@+id/test4"
android:icon="@mipmap/ic_launcher"
android:title="@string/test"
android:orderInCategory="500"
app:showAsAction="ifRoom"/>
必须要有id和title,orderIncategory表示排列顺序,越大在菜单栏中越靠后,若同样大小,则按照main文件中的书写顺序。
always表示显示在菜单栏,never表示不在菜单栏中显示,ifRoom表示如果空间允许,则显示在菜单栏中。
如果有不在菜单栏中直接显示的,则在菜单栏右上角多一个三点,里面是未直接显示的item,此时icon已经失去意义,只会显示title。
在菜单栏中显示时,如果没有定义icon,则会直接显示title,如果title为英文,则title会全部大写,可以在主题中设置不要大写。
接下来需要在Activity中重写以下方法:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.test3:
Toast.makeText(MainActivity.this, "3", Toast.LENGTH_SHORT).show();
break;
case R.id.test4:
Toast.makeText(MainActivity.this, "4", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return true;
}
接下来运行,便可看到菜单栏了!