【android编程】 第六讲-Android菜单布局及使用
实验题Code链接:https://blog.csdn.net/xbean1028/article/details/104800456
文章目录第六讲Android菜单1.定义菜单资源文件属性2.选项菜单3. 上下文菜单(长按)4.带子菜单的选项菜单5. 题目记录 1.定义菜单资源文件res/menu目录建立xml文件包含一下几个元素:
元素除了常规的id、icon、title属性的支持,还有一个重要的属性:android:showAsAction,这个属性是起兼容性的,描述了在Android的高版本中,菜单项何时以何种方式加入到ActionBar中。
是对菜单进行分组,分组后的菜单显示效果并没有区别,唯一的区别在于可以针对菜单组进行操作,这样对于分类的菜单项,操作起来更方便,提供如下的操作:
Menu.setGroupCheckable():菜单组内的菜单是否都可选。 Menu.setGroupVisible():是否隐藏菜单组的所有菜单。 Menu.setGroupEnabled():菜单组的菜单是否有用。如果菜单项需要单选或者多选,可以使用android:checkableBehavior属性设置,它可以对单个或者设置一个组,这个属性接受三个参数:single,单选;all,多选,none,没有Checked的选项,默认。
当创建好一个XML菜单资源文件之后,可以使用MenuInflater.inflate()方法填充菜单资源,使XML资源变成一个可编程的对象。
属性android:id
定义资源ID,它是个唯一值,使用“@+id/name”格式可以给这个菜单项创建一个新的资源ID,“+”号指示要创建一个新的ID。
android:title
字符串资源,它用字符串资源或原始的字符串来定义菜单的标题。
android:titleCondensed
字符串资源。它用字符串资源或原始的字符串来定义一个简要的标题,以便在普通的标题太长时来使用。
android:icon
可绘制资源,它定义了一个菜单项所要使用的图标。
android:onClick
方法名。在这个菜单项被点击时,会调用这个方法。在Activity中,这个方法必须用public关键字来声明,并且只接受一个MenuItem对象,这个对象指明了被点击的菜单项。这个方法会优先标准的回调方法:onOptionsItemSelected()。
android:showAsAction
关键词。它定义这个项目作为操作栏中的操作项的显示时机和方式。只用Activity包含了一个ActionBar对象时,菜单项才能够作为操作项来显示。这个属性在API级别11中被引入,有效值如下:
值 | 说明 |
---|---|
ifRoom | 如果有针对这个项目的空间,则只会把它放到操作栏中 |
withText | 操作项也要包含文本(通过android:title属性来定义的)。可以把这个值与其他的Flag设置放到一起,通过管道符“|”来分离它们。 |
never | 这个项目不会放到操作栏中 |
always | 始终包这个项目放到操作栏中。要避免使用这个设置,除非在操作栏中始终显示这个项目是非常关键的。设置多个项目作为始终显示的操作项会导 致操作栏中其他的UI溢出。 |
icollapseActiionView | 它定义了跟这个操作项关联的可折叠的操作View对象(用android:actionViewLayout来声明)。 |
android:actionViewLayout
它引用一个布局资源,这个布局要用于操作窗口。更多的信息请参照“操作栏”开发指南。这个属性在API级别11中被引入。
android:actionViewClass
类名。它定义了操作窗口要使用的View对象的完整的类名。例如,“android.widget.SearchView”说明操作窗口要使用的SearchView类。
android:actionProviderClass
类名,它是操作项目所使用的ActionProvider类的完整的类名。例如,“android.widget.ShareActionProvider”说明要使用 ShareActionProvider类。
android:alphabeticShortcut
字符,定义一个字符快捷键
android:numericShortcut
数字值,定义一个数字快捷键
android:checkable
布尔值,如果菜单项是可以复选的,那么就设置为true。
android:checked
布尔值,如果复选菜单项默认是被选择的,那么就设置为true。
android:visible
布尔值,如果菜单项默认是可见的,那么就设置为true。
android:enabled
布尔值,如果菜单项目默认是可用的,那么就设置为true。
android:menuCategory
关键词。它的值对应了定义菜单项优先级的CATEGORE_*常量,有效值如下:
值 | 说明 |
---|---|
container | 菜单项是容器的一部分 |
system | 菜单项是由系统提供的。 |
secondary | 提供给用户的辅助选择的菜单项(很少使用) |
alternative | 基于当前显示的数据来选择操作的菜单项。 |
android:orderInCategory
整数值,它定义菜单项在菜单组中的重要性的顺序。
android:checkableBeharior
关键词。针对菜单组的可复选行为的类型。有效值如下:
值 | 说明 |
---|---|
none | 没有可复选性 |
all | 组内的所有的项目都被复选(使用复选框) |
single | 仅有一个项目能够被复选(使用单选按钮) |
android:visible
布尔值,如果菜单组是可见的,就设置为true。
android:enabled
布尔值,如果菜单组是可用的,就设置为true。
android:menuCategory
关键词。它的值对应了Menu类的CATEGORY_*常量,定义了菜单组的优先级。有效值如下:
值 | 说明 |
---|---|
container | 菜单组是容器的一部分 |
system | 菜单组是由系统提供的。 |
secondary | 提供给用户的辅助选择的菜单组(很少使用) |
alternative | 基于当前显示的数据来选择操作的菜单组。 |
android:orderInCategory
整数值,它定义了分类中菜单项目的默认顺序。
一个完整示例:https://blog.csdn.net/xbean1028/article/details/104800456
第一步创建选项菜单的选项卡xml
在Java文件中重写onCreateOptionsMenu方法,导入menu布局文件
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu,menu);
return true;
}
在Java文件中重写onOptionsItemSelected方法,为每个选项添加监听事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.menu_login:
Toast.makeText(this,"登陆", Toast.LENGTH_SHORT).show();
break;
case R.id.menu_setting:
Toast.makeText(this,"设置", Toast.LENGTH_SHORT).show();
break;
case R.id.menu_exit:
Toast.makeText(this,"退出", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
上述方法适用于需要用到选项菜单的活动很多的情况,如果只有少数几个活动需要用到选项菜单,则可在Java文件中重写onCreateOptionsMenu时使用menu的add (int groupId, int itemId, int order, int titleRes)方法,直接添加所需要的选项。参数描述:
groudId:int型,是指组ID,用以批量地对菜单子项进行处理和排序
itemId:int型,是子项ID,是每一个菜单子项的唯一标识
order:int型,是指定菜单子项在选项菜单中的排列顺序
titlerRes:String型,是指选项的文本显示内容
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0,1,0,"add登陆");
menu.add(0,2,1,"add设置");
menu.add(0,3,3,"add退出");
return true;
}
参考链接:
https://blog.csdn.net/qq_43359613/article/details/82970209
https://blog.csdn.net/wanghao200906/article/details/41309285
一个完整示例:https://blog.csdn.net/xbean1028/article/details/104800456
1.首先给View注册上下文菜单registerForContextMenu();
ListView listview = (ListView) findViewById(R.id.listview);
ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,getData());
listview.setAdapter(adapter);
this.registerForContextMenu(listview);
//为按钮注册contextMenu,当你长按按钮的时候就会调用onCreateContextMenu方法
registerForContextMenu(button);
2.添加上下文菜单内容onCreateContextMenu():
—可以通过代码动态添加;
public void onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo menuInfo){
super.onCreateContextMenu(menu,v,menuInfo);
//设置Menu显示内容
menu.setHeaderTitle("文件操作");
menu.setHeaderIcon(R.drawable.ic_launcher);
menu.add(1,1,1,"复制");
menu.add(1,2,1,"粘贴");
menu.add(1,3,1,"剪切");
menu.add(1,4,1,"重命名");
}
menu.add(1,1,1,“复制”);参数解读: https://blog.csdn.net/xbean1028/article/details/104799163
—可以加载xml文件中的菜单项;
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
getMenuInflater().inflate(R.menu.basic_main, menu);
//设置标题栏的图标
menu.setHeaderIcon(R.drawable.ic_launcher);
//设置标题栏的文字
menu.setHeaderTitle("请选择操作");
}
3.设置菜单点击后响应事件onContextItemSelected();
@Override
public boolean onContextItemSelected(MenuItem item){
switch(item.getItemId()){
case 1:
Toast.makeText(MainActivity.this,"点击复制",Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(MainActivity.this,"点击粘贴",Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(MainActivity.this,"点击剪切",Toast.LENGTH_SHORT).show();
break;
case 4:
Toast.makeText(MainActivity.this,"点击重命名",Toast.LENGTH_SHORT).show();
break;
}
return super.onContextItemSelected(item);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.add:
Toast.makeText(this, "你点击了添加!", 1).show();
break;
case R.id.delete:
Toast.makeText(this, "你点击了删除!", 1).show();
break;
case R.id.update:
Toast.makeText(this, "你点击了修改!", 1).show();
break;
case R.id.query:
Toast.makeText(this, "你点击了查询!", 1).show();
break;
}
return true;
}
参考链接:
https://www.cnblogs.com/guojinyu/p/6664746.html
https://www.cnblogs.com/wuyou/p/3704924.html
4.带子菜单的选项菜单
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = new MenuInflater(this);
inflater.inflate(R.menu.optionmenu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getGroupId() == R.id.setting) {
if (item.isChecked()) {
item.setChecked(false);
} else {
item.setChecked(true);
}
}
if (item.getItemId() != R.id.item2) {
Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
}
return super.onOptionsItemSelected(item);
}
}
5. 题目记录
对于菜单下列说法不正确的是 C
得分/总分
A.菜单资源文件通常放在res/menu目录下 B.Android的菜单可以用两种方法创建 C.Android默认自动创建菜单1.00/1.00 D.菜单资源使用菜单的的标题属性是 A
得分/总分
A.android:title1.00/1.00 B.android:Label C.android:caption D.android:text为菜单项指定快捷键的属性是 D
得分/总分
A.android:ShortKey B.Shortcut C.android:accelerator_key D.android:alphabeticShortcut菜单的图标属性是 C
得分/总分
A.android:image B.android:drawable C.android:icon1.00/1.00 D.android:picture对于group标记下列说法正确的是 A
得分/总分
A.将菜单组成一个选项 B.成组的菜单项会堆叠 000 C.成组的菜单会有某些共同的属性 D.创建子菜单 000选项菜单是指 B
得分/总分
A.菜单项可以被选择 B.用户单击菜单按键时弹出1.00/1.00 C.每一个菜单项都有单选框 D.每一个菜单项都有复选框上下文菜单是指 A
得分/总分
A.当用户按住某个组件不放弹出的菜单 B.由一串有相互联系的菜单项构成 C.菜单会根据上下文的含义设置菜单项0.00 D.菜单是上下文关联的对于选项菜单 D
得分/总分
A.要重写onCreateContextMenu()方法 B.要注册菜单 C.要重写onContextItemSelected()方法 D.要重写onCreateOptionMenu()方法9… 对于上下文菜单 B
得分/总分
A.要重写onCreateOptionMenu()方 B.要注册菜单1.00/1.00 C.单击菜单按键时弹出菜单 D.要重写onOptionItemSelected()方法在使用菜单资源时 C
得分/总分
A.使用代理组件获取菜单资源 B.使用findViewById()获取菜单资源 C.要使用MenuInfater类的对象获取菜单资源1.00/1.00 D.用new关键字创建Menu对象下列说法正确的是 A
得分/总分
A.定义菜单首先要创建菜单文件夹1.00/1.00 B.可以将直接设置成单选形式 C.菜单资源文件中第一个标记是 D.菜单资源文件中第一个标记是作者:江山点墨
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341