PopupMenu、PopupWindow的使用

PopMenu的使用

        PopupMenu popupMenu = new PopupMenu(this, view);
        getMenuInflater().inflate(R.menu.main, popupMenu.getMenu());
        popupMenu.show();
  • 这里需要注意的是:填充器是特定的填充器,不能使用普通的填充器
  • 里面填充过的布局文件必须是menu文件夹下main特定的

    
    
    

PopupWindow的使用心得

从构造方法中我们可以看出,要使用PopupWindow()就必须要设置三个属性

  • contentView  要显示的布局
    
  • width  设置具体的大小,不设置传入
    

ViewGroup.LayoutParams.WRAP_CONTENT

  • height  和宽度一样,必须要设置
    
下面是一个简单的使用
    private void showPopWindow() {
        View contentView = View.inflate(this, R.layout.menu, null);
        PopupWindow popupWindow = new PopupWindow(this);
        popupWindow.setContentView(contentView);
        Button btn1 = (Button) contentView.findViewById(R.id.btn_1);
        btn1.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "OneX", 1).show();
            }
        });
        
        popupWindow.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
        popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
        
        
//      popupWindow.showAsDropDown(btnAmShowmenu);
        popupWindow.setOutsideTouchable(true);
        popupWindow.showAtLocation((View) btnAmShowmenu.getParent(), Gravity.BOTTOM, 0, 0);

    }

context_menu_enter.xml 新建的anim文件夹,里面对应相应的文件

  
  
  
      
  
 
 

1、setTouchable(boolean touchable)

设置PopupWindow是否响应touch事件,默认是true,如果设置为false,即会是下面这个结果:(所有touch事件无响应,包括点击事件)

2、setFocusable(boolean focusable)

该函数的意义表示,PopupWindow是否具有获取焦点的能力,默认为False。一般来讲是没有用的,因为普通的控件是不需要获取焦点的,而对于EditText则不同,如果不能获取焦点,那么EditText将是无法编辑的。
所以,我们在popuplayout.xml最底部添加一个EditText,分别演示两段不同的代码,即分别将setFocusable设置为false和设置为true;

3、setOutsideTouchable(boolean touchable)

这个函数的意义,就是指,PopupWindow以外的区域是否可点击,即如果点击PopupWindow以外的区域,PopupWindow是否会消失。

你可能感兴趣的:(PopupMenu、PopupWindow的使用)