代码改变世界

[Android学习笔记]PopupWindow的使用

2014-03-15 19:15  hellenism  阅读(695)  评论(0编辑  收藏  举报

什么时候使用PopupWindow?

当业务需求的交互形式需要在当前页弹出一个简单可选项UI与用户进行交互时,可使用PopupWindow完成此功能开发

 

Android Dev API Doc

 


 

 

PopupWindow是一个View的容器,它不像Frament和Activity这些View容器一样有完整的生命周期。它只是用来简单呈现一个自定义View而已。

 

使用PopupWindow的一般步骤:

1.创建PopupWindow对象

2.设置创建ContentView,并设置。创建ContentView的方法很多,Inflater动态加载也行,Java代码创建也行

3.设置必要参数,Show PopWindow

 


 PopupWindow显示在屏幕上之后,它的显示是不会受到物理回退键影响的,要实现物理回退,需要添加额外代码

 

主要方法:

a).创建PopupWindow对象

new PopupWindow(view ,LayoutParams,LayoutParams,focus);

View为PopWindow承载的View

LayoutParams为View的填充形式

 

b).是否可以获得焦点

setFocusable(bool)

如果不为true,则PopWindow无法接受用户输入

 

c).是否相应点击窗口外部事件

setOutsideTouchable(bool)

通过此属性配合添加一个BackgroundDrawable,则可实现点击窗口外部,弹窗消失的效果

 

d).弹出PopupWindow

showAtLocation()

showAsDropDown() , 此方法会根据ParentView来决定Popup的位置,如果ParentView在屏幕顶端,Popup会出现在ParentView下端,反之会出现在ParentView上端

 

e).设置PopupWindow对象的尺寸

setWidth()

setHeight()

PopupWindow是ContentView的承载View,所以无论ContentView的尺寸是多少,PopupWindow的尺寸只由自身决定。

所以如果忘记了setWidth,setHeight,那么调用showAsDropDown()的时候是看不到,因为PopupWindow对象本身尺寸为0

 


 

例子:

public class MainActivity extends Activity
{

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        Button btnTop = (Button)findViewById(R.id.btn_topBtn);
        Button btnBottom = (Button)findViewById(R.id.btn_bottomBtn);
        
        btnTop.setOnClickListener(new btnClickListener());
        btnBottom.setOnClickListener(new btnClickListener());
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
    private void createPopup(View view)
    {
        PopupWindow pop = new PopupWindow();
        
        TextView textView = new TextView(this);
        textView.setText("i ' m textView");
        
        pop.setContentView(textView);
        pop.setBackgroundDrawable(new ColorDrawable(Color.RED));
        pop.setWidth(500);
        pop.setHeight(500);
        //pop.setFocusable(true);
        pop.setOutsideTouchable(true);
        pop.showAsDropDown(view);
    }
    
    private class btnClickListener implements OnClickListener
    {        
        @Override
        public void onClick(View arg0)
        {
            // TODO Auto-generated method stub
            createPopup(arg0);
        }    
    }
}