前言
最近一直在学习Flutter相关的知识 ,好久没有看Android的东西了 ,今天有空继续来看Android官网的知识,
菜单资源
菜单资源定义可通过 MenuInflater 进行扩充的应用菜单,包括选项菜单、上下文菜单和子菜单。
https://developer.android.com/guide/topics/resources/menu-resource
此处是引用了Android一句对菜单资源是啥东西的一个解释
-
文件位置
菜单资源文件的位置是在res文件夹下的menu文件夹内部 ,使用者可以定义任意多个菜单文件 -
编译后的资源类型
菜单文件编译后回成为Menu或者是他的子类 -
资源引用
在xml文件中通过 @[packagename]menu.filename来引用
在代码中通过 R.menu.filename来引用 -
语法
<?xml version="1.0" encoding="utf-8"?>
//menu节点必须是根节点 包含item或者是grounp元素
<menu xmlns:android="http://schemas.android.com/apk/res/android">
// 菜单项 可能包含item(子菜单) 必须是menu 或者是group的子元素
<item
//
android:id="@[+][package:]id/resource_name"
//菜单的标题
android:title="string"
//压缩标题 是在正常标题过长的时候使用的
android:titleCondensed="string"
//用作菜单项图标的图片
android:icon="@[package:]drawable/drawable_resource_name"
//点击菜单项的时候调用的方法
android:onClick="method name"
/***
* ifroom :只有应用栏中有空间的情况下才将其放置其中
* never:不将此项放入到标题栏中 而是放入到溢出菜单中
* always:始终将此项放在应用栏中。
***/
android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]
//用作操作视图的布局
android:actionLayout="@[package:]layout/layout_resource_name"
//要用作操作视图的View的完全限定名
android:actionViewClass="class name"
android:actionProviderClass="class name"
//字母快捷键
android:alphabeticShortcut="string"
android:alphabeticModifiers=["META" | "CTRL" | "ALT" | "SHIFT" | "SYM" | "FUNCTION"]
//数字快捷键
android:numericShortcut="string"
android:numericModifiers=["META" | "CTRL" | "ALT" | "SHIFT" | "SYM" | "FUNCTION"]
android:checkable=["true" | "false"]
android:visible=["true" | "false"]
android:enabled=["true" | "false"]
android:menuCategory=["container" | "system" | "secondary" | "alternative"]
android:orderInCategory="integer" />
<group android:id="@[+][package:]id/resource name"
android:checkableBehavior=["none" | "all" | "single"]
android:visible=["true" | "false"]
android:enabled=["true" | "false"]
android:menuCategory=["container" | "system" | "secondary" | "alternative"]
android:orderInCategory="integer" >
<item />
</group>
<item >
<menu>
<item />
</menu>
</item>
</menu>
使用
- 创建资源文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/item_search"
android:icon="@drawable/ic_search"
android:title="搜索"
app:showAsAction="ifRoom" />
<group android:id="@+id/menu_group">
<item
android:id="@+id/group_item_one"
android:title="group_item_one"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/group_item_two"
android:title="group_item_two"
app:showAsAction="ifRoom"/>
</group>
</menu>
- 代码中加载菜单
/***
* 返回true将显示菜单 返回false将不会显示菜单
*/
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
//将菜单资源文件加载成一个menu对象
menuInflater.inflate(R.menu.example_menu, menu)
return true
}
/***
* 返回false 正常使用 返回 true消费掉
*/
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.item_search -> {
ToastUtil.toastTextView(value = "搜索")
}
}
return false
}
到这里菜单资源的简单使用就结束了