Menu

一:使用步骤
1:要定义Menu,我们首先需要在res文件夹下新建menu文件夹,它将用于存储与Menu相关的所有XML文件。


    
        
        

        
            
                
                

                
                    
                        
                        
                    
                
            
        
    

2:在activity重写方法
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.menu_demo, menu)
return true
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.option_sub_file -> return true

}
return super.onOptionsItemSelected(item)

}

3:要让Fragment中的菜单项显示出来,还需要在Fragment中调用setHasOptionsMenu(true)方法。传入true作为参数表明Fragment需要加载菜单项。建议在Fragment的onCreate方法中调用这个方法,如下所示:
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}

二:menu、item、group介绍:
我们可以使用

、、三种XML元素定义Menu,下面简单介绍一下它们:

  • 是菜单项的容器。 元素必须是该文件的根节点,并且能够包含一个或多个和元素。
  • 是菜单项,用于定义MenuItem,可以嵌套 元素,以便创建子菜单。
  • 是元素的不可见容器(可选)。可以使用它对菜单项进行分组,使一组菜单项共享可用性和可见性等属性。
    其中,是我们主要需要关注的元素,它的常见属性如下:
  • android:id:菜单项(MenuItem)的唯一标识
  • android:icon:菜单项的图标(可选)
  • android:title:菜单项的标题(必选)
  • android:showAsAction:指定菜单项的显示方式。常用的有ifRoom、never、always、withText,多个属性值之间可以使用|隔开。

我们需要知道,菜单栏中的菜单项会分为两个部分。一部分可以直接在菜单栏中看见,我们可以称之为常驻菜单;另一部分会被集中收纳到溢出菜单中(就是菜单栏右侧的小点状图标)。一般情况下,常驻菜单项以图标形式显示(需要定义icon属性),而溢出菜单项则以文字形式显示(通过title属性定义)。
showAsAction的差异如下所示:

  • always:菜单项永远不会被收纳到溢出菜单中,因此在菜单项过多的情况下可能超出菜单栏的显示范围。
  • ifRoom:在空间足够时,菜单项会显示在菜单栏中,否则收纳入溢出菜单中。
  • withText:无论菜单项是否定义了icon属性,都只会显示它的标题,而不会显示图标。使用这种方式的菜单项默认会被收纳入溢出菜单中。
  • never:菜单项永远只会出现在溢出菜单中。

你可能感兴趣的:(Android)