文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【android编程】 第六讲-Android菜单布局及使用

2022-06-06 13:18

关注

第六讲Android菜单

实验题Code链接:https://blog.csdn.net/xbean1028/article/details/104800456

文章目录第六讲Android菜单1.定义菜单资源文件属性2.选项菜单3. 上下文菜单(长按)4.带子菜单的选项菜单5. 题目记录 1.定义菜单资源文件

res/menu目录建立xml文件包含一下几个元素:

:定义一个Menu,是一个菜单资源文件的根节点,里面可以包含一个或者多个和元素。
:创建一个MenuItem,代表了菜单中一个选项。
:对菜单项进行分组,可以以组的形式操作菜单项。

元素除了常规的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
整数值,它定义了分类中菜单项目的默认顺序。

2.选项菜单

一个完整示例: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

3. 上下文菜单(长按)

一个完整示例: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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯