3.8、popupWindow和contextMenu

popupWindow和contextMenu都是一种弹窗。我们了解一下即可

popup直接new即可:

xml配置如下:

然后设置他的样式,主要是设置他的contentView。既是他的内容view

我这里设置了day7中的listview

然后想day7那样为listview设置数据,这里注意取得是popup里面的contentView,而不是day10activity的this。

        //把day7中listview抄过来
      //  ListView listView = findViewById(R.id.listView);
  ListView listView =window.getContentView().findViewById(R.id.listView);
        //数据源
        String[] objects =new String[]{"这是第一条", "这是第二条"};
        ArrayAdapter<String> arrayAdapter=new ArrayAdapter<String>(this,
                R.layout.activity_day7_arrayadapter_item,R.id.textView,objects);
        listView.setAdapter(arrayAdapter);

然后弹出的时候。有个showAtLocation,设置弹出位置。我这里选择了基于activity的整个布局的底部弹出。

我这里是从底部弹出如下。

contentMenu,一开始我也想new的,解决new出来是他的接口类,并且还没有实现子类

查了一下发现他是已经藏在我们activity中了,需要先注册然后重新相应方法既可以使用

1.在activity的onCreate(...)方法中为一个view注册上下文菜单

2.在onCreateContextMenuInfo(...)中生成上下文菜单。

3.在onContextItemSelected(...)中响应上下文菜单项。

生成和响应如下、

 @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
                                   ContextMenu.ContextMenuInfo menuInfo) {
        // set context menu title
        menu.setHeaderTitle("条目");
        // add context menu item
        menu.add(0, 1, Menu.NONE, "按钮中的弹窗1");
        menu.add(0, 2, Menu.NONE, "按钮中的弹窗2");
  }
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        // 得到当前被选中的item信息
        AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();

        switch(item.getItemId()) {
            case 1:
            // do something
            break;
            case 2:
            // do something
            break;
            default:
                return super.onContextItemSelected(item);
        }
        return true;
    }

然后注册的时候绑定一个view,然后长按view就可以触发contentMenu了。

this.registerForContextMenu(findViewById(R.id.contentMenu));

我上面那个给button设置点击事件来触发其实是不对的。

如下

发布了39 篇原创文章 · 获赞 2 · 访问量 5017

猜你喜欢

转载自blog.csdn.net/u013636987/article/details/102156896
3.8