1、res -> New -> Directory,输入名字menu创建文件夹,右键menu -> New -> Menu resource file,创建main资源文件。
2、在main中添加代码,<item>标签涌来创建具体的某一个菜单项,然后通过android:id给菜单项指定唯一的标识符,通过android:title给菜单项指定一个名称。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/add_item" android:title="Add"></item>
<item android:id="@+id/remove_item" android:title="Remove"></item>
</menu>
3、在FirstActivity中重写onCreateOptionsMenu()方法,重写方法可以使用Ctrl + o快捷键(Mac系统是control + o)
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.main,menu)
return true
}
4、Java中的JavaBean概念,会根据类中的字段自动生成相应的Getter和Setter方法
public class Book{
private int pages;
public int getPages(){
return pages;
}
public void setPages(int pages){
this.pages = pages;
}
}
val book = Book()
book.pages = 500
val bookPages = book.pages
//这里看上去好像并没有调用Book类的setPages()和getPages()方法,而是直接对pages字段进行了赋值和读取;Kotlin自动将上述代码转换成了调用setPages()方法和getPages()方法
5、根据上述语法糖,onCreateOptionsMenu中menuInflater实际上是调用了父类的getMenuInflater()方法,getMenuInflater()方法能够得到一个menuInflater对象,再调用它的inflated()方法,就可以给当前的Activity创建菜单了。
5.1、inflate()方法接收两个参数,第一个参数用于指定通过哪个资源文件来创建菜单;第二个参数用于指定菜单项将添加到哪个Menu对象中,这里直接使onCreateOptionsMenu()方法中的menu参数
5.2、返回true表示允许创建的菜单显示出来,如果返回了false,创建的菜单将无法显示
6、要使定义的菜单可用,需要再定义菜单响应事件,在FirstActivity中重写onOptionsItemSelected()方法
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId){//通过item.itemId来判断点击的是哪一个菜单项,Kotlin实际上在背后调用的是item的getItemId()方法
R.id.add_item -> Toast.makeText(this,"You clicked Add",Toast.LENGTH_SHORT).show()
R.id.remove_item -> Toast.makeText(this,"You clicked Remove",Toast.LENGTH_SHORT).show()
}
return true
}
网友评论