Kotlin安卓开发学习(5)

在Activity中使用Menu

想要在activity内使用菜单,需要专门去创建菜单布局,菜单布局被统一放在menu资源文件夹下,通过创建Menu resource file来创建菜单布局。

内部代码如下:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
 <item
   android:id="@+id/add_item"
   android:title="Add"/>
 <item
   android:id="@+id/remove_item"
   android:title="Remove"/>
</menu>

item表示菜单内部菜单项,需要指定id和内容title

使用菜单布局

在activity内重写onCreateOptionsMenu()方法使用:

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
   menuInflater.inflate(R.menu.main, menu)
   return true
}

这里的menuInflater实际上是调用了父类的getMenuInflater()方法得到了对象,在调用它的inflate()方法,其传入两个参数第一个参数用于指定我们通过哪一个资源文件来创建菜单,第二个参数用于指定我们的菜单项将添加到哪一个Menu对象当中。最后给这个方法返回true,表示允许创建的菜单显示出来,如果返回了false,创建的菜单将无法显示。

当然,光创建出菜单不行,我们也得给菜单添加点击事件,重写onOptionsItemSelected():

override fun onOptionsItemSelected(item: MenuItem): Boolean {
   when (item.itemId) {
      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
}

这里我们通过itemid来判断哪个菜单项被选择了。效果如下:

更多的菜单

上面的菜单只适配于activity,在右上角显示菜单,但实际使用中我们可能会遇上长按某块区域后,在其旁边显示菜单项。这里我们就需要使用PopupMenu

首先,需要完成上诉操作,我们需要设置长按事件(废话)。在长按事件中,我们需要创建PopupMenu并设置其inflate和OnMenuItemClickListener,来实现效果,具体如下:

var popupMenu = PopupMenu(this, v)
        popupMenu.menuInflater.inflate(R.menu.menu, popupMenu.menu)
        popupMenu.setOnMenuItemClickListener { menuItem ->
            when (menuItem.itemId) {
                R.id.edit -> makeEdit(v)
                R.id.delete -> makeDelete(v)
                else -> true
            }
        }
popupMenu.show()

这里我们最后使用show()方法来显示菜单。别的设置方法与之前的菜单基本相同

销毁一个Activity

使用finish()方法可以销毁一个Activity