服务器之家

服务器之家 > 正文

Android学习笔记——Menu介绍(二)

时间:2021-03-09 15:26     来源/作者:JohnTsai

知识点:

这次将继续上一篇文章没有讲完的menu的学习,上下文菜单(context menu)和弹出菜单(popup menu)。

上下文菜单

上下文菜单提供对ui界面上的特定项或上下文框架的操作,就如同windows中右键菜单一样。
在android中,有两种提供上下文操作的方式:一种是在浮动的上下文菜单(长按弹出)中,另一种是上下文操作模式里。

Android学习笔记——Menu介绍(二)

那么怎样创建一个浮动的上下文菜单(floating context menu)呢?

1.调用registerforcontextmenu()方法为view注册上下文菜单。
2. 在activity或fragment中实现oncreatecontextmenu()方法。
3.实现oncontextitemselected()方法以响应用户长按菜单项的事件。

下面是一个上下文菜单的demo:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
private textview textview;
  final int red = 0x101;
  final int blue = 0x102;
  final int green = 0x103;
  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_main);
    
    textview=(textview)findviewbyid(r.id.textview);
    //给textview注册上下文菜单
    registerforcontextmenu(textview);
  }
//创建上下文菜单
  @override
  public void oncreatecontextmenu(contextmenu menu, view v,
      contextmenuinfo menuinfo) {
    menu.add(0, red, 0, "red");
    menu.add(0, blue, 0, "blue");
    menu.add(0,green,0,"green");
    menu.setheadertitle("set the color of the textview");
    menu.setgroupcheckable(0, true, true);
  }
  //菜单项响应事件
  @override
  public boolean oncontextitemselected(menuitem item) {
     switch (item.getitemid()) {
    case green:
      item.setchecked(true);
      textview.setbackgroundcolor(color.green);
      break;
    case blue:
      item.setchecked(true);
      textview.setbackgroundcolor(color.blue);
      break;
    case red:
      item.setchecked(true);
      textview.setbackgroundcolor(color.red);
      break;
    }
     return true;
  }

Android学习笔记——Menu介绍(二)

Android学习笔记——Menu介绍(二)

Android学习笔记——Menu介绍(二)

使用上下文操作模式

上下文操作模式是实现系统actionmode接口,关注用户的交互来实现上下文操作行为。当用户通过选择菜单项来触发这个模式,一个可供用户对刚选择的菜单项进行操作的上下文action bar出现在屏幕顶部。用户可选择多项(select multi items)、取消选择(deselect)、操作完成(done)、返回(back)等操作。

那么什么时候调用上下文操作模式呢?

在下面两种情况下调用:

1.用户对view执行长按(long-click)操作。

2.用户在view中选择了复选框(checkbox)或者类似的ui组件。

怎么启用上下文操作模式呢?

这也分两种情况:

1.针对独立的view

首先实现 actionmode.callback接口,然后调用startactionmode()方法。

2.针对listview或girdview(或其他abslistview的拓展)

实现 abslistview.multichoicemodelistener接口,调用setmultichoicemodelistener()方法,最后传入choice_mode_multiple_modal参数调用setchoicemode()方法。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
private listview listview;
  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_main);
    
    listview=(listview)findviewbyid(r.id.listview1);
    string arr[]={"new york","shanghai","los angle","beijing","paris","tykyo","moscow","berlin","hongkong"};
    //将数组包装成arrayadapter
    arrayadapter<string> adapter1= new arrayadapter<string>(this,r.layout.array_item ,arr);
    listview.setadapter(adapter1);
    
    listview.setchoicemode(listview.choice_mode_multiple_modal);
    listview.setmultichoicemodelistener(new multichoicemodelistener() {
      
      @override
      public boolean onprepareactionmode(actionmode mode, menu menu) {
        // todo auto-generated method stub
        return false;
      }
      
      @override
      public void ondestroyactionmode(actionmode mode) {
        // todo auto-generated method stub
        
      }
      
      @override
      public boolean oncreateactionmode(actionmode mode, menu menu) {
        // todo auto-generated method stub
          menuinflater inflater = mode.getmenuinflater();
          inflater.inflate(r.menu.contextmenu, menu);
          return true;
      }
      
      @override
      public boolean onactionitemclicked(actionmode mode, menuitem item) {
        switch (item.getitemid()) {
      case r.id.done:
        toast.maketext(mainactivity.this, "you have clicked the done", toast.length_long).show();
        break;
      case r.id.cancel:
        toast.maketext(mainactivity.this, "you have clicked the cancel", toast.length_long).show();
      default:
        break;
      
        return true;
      }
      
      @override
      public void onitemcheckedstatechanged(actionmode mode, int position,
          long id, boolean checked) {
        // todo auto-generated method stub
        
      }
    });
  }

Android学习笔记——Menu介绍(二)

Android学习笔记——Menu介绍(二)

Android学习笔记——Menu介绍(二)

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部