[Android学习笔记]PopupWindow的使用
2014-03-15 19:15 hellenism 阅读(702) 评论(0) 编辑 收藏 举报什么时候使用PopupWindow?
当业务需求的交互形式需要在当前页弹出一个简单可选项UI与用户进行交互时,可使用PopupWindow完成此功能开发
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); } } }