Kotlin:如何使用Anko DSL制作工具栏菜单?

Kotlin:如何使用Anko DSL制作工具栏菜单?

问题描述:

如何直接在UI类中使用Anko DSL制作Android工具栏菜单? 不想在我的Activity类中编写侦听器。Kotlin:如何使用Anko DSL制作工具栏菜单?

关于我下面给出的答案,有没有办法避免XML recource文件来描述菜单项?

的AndroidManifest.xml文件选择主题没有动作条

创建您的菜单XML资源文件和往常一样:

<menu ...> 
    <item 
    android:id="@+id/action1" 
    android:title="Action1"/> 
    <item 
    android:id="@+id/action2" 
    android:title="Action2"/> 
</menu> 

对于菜单的每个项目创建自定义activites

创建主要活动类别:

class ActivityMain : AppCompatActivity() { 

    override fun onCreate(savedInstanceState: Bundle?) { 
     super.onCreate(savedInstanceState) 
     ActivityMainUI().setContentView(this) 

     //do not use setActionBar() or setSupportActionBar() 
    } 

    // do not override onOptionsItemSelected() and onCreateOptionsMenu() here 

} 


class ActivityMainUi: AnkoComponent<ActivityMain> { 

    override fun createView(ui: AnkoContext<ActivityMain>) = with(ui) { 

     coordinatorLayout { 

      // justify layout 

      appBarLayout { 

       toolbar { 

        // justify your toolbar 

        inflateMenu(R.menu.your_menu_xml_resource) 

        onMenuItemClick { item -> 
         when (item!!.itemId) { 
          R.id.action_1 -> { 
           startActivity<Activity1>() 
           true 
          } 
          R.id.action_2 -> { 
           startActivity<Activity2>() 
           true 
          } 
          else -> false 
         } 
        } 

       }.lparams(width = matchParent, height = wrapContent) 

      }.lparams(width = matchParent, height = wrapContent) 

      // put other views 
     } 

    } 

}