Android UI进阶之弹窗的使用
Android UI进阶之弹窗的使用
讲下Android中的PopupWindow。姑且就叫做弹窗吧,其实和AlertDialog一样,也是一种对话框,两者也经常混用,但是也各有特点。下面就看看使用方法。首先初始化一个PopupWindow
[java]
- PopupWindow mPop = new PopupWindow(getLayoutInflater().inflate(R.layout.window, null), LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
实现PopupWindow的构造函数,第一个参数导入布局,后面两个指定宽和高。
弹窗一般有两种展示方法,用showAsDropDown()和showAtLocation()两种方法实现。一般参数有两种,有偏移和无偏移。
[java]
- bt1.setOnClickListener(new OnClickListener(){
- @Override
- public void onClick(View v) {
- initPopWindow();
- mPop.showAsDropDown(v);//以这个Button为anchor(可以理解为锚,基准),在下方弹出
- }});
- bt2.setOnClickListener(new OnClickListener(){
- @Override
- public void onClick(View v) {
- initPopWindow();
- mPop.showAsDropDown(v,20,-20);//横轴偏移20,纵轴-20,一个状态栏的长度
- }});
- bt3.setOnClickListener(new OnClickListener(){
- @Override
- public void onClick(View v) {
- initPopWindow();
- mPop.showAtLocation(PopWindow.this.findViewById(R.id.rl),
- Gravity.CENTER, 0, 0);//在屏幕居中,无偏移
- }});
- bt4.setOnClickListener(new OnClickListener(){
- @Override
- public void onClick(View v) {
- initPopWindow();
- mPop.showAtLocation(PopWindow.this.findViewById(R.id.rl),
- Gravity.TOP | Gravity.LEFT, 20, 20);//在屏幕顶部|居右,带偏移
- }});
- bt5.setOnClickListener(new OnClickListener(){
- @Override
- public void onClick(View v) {
- if (mPop != null) {
- mPop.dismiss();
- }
- }});
- }
其中initPopWindow()方法来初始化一个弹窗
[java]
- private void initPopWindow() {
- if (mPop == null) {
- mPop = new PopupWindow(getLayoutInflater().inflate(R.layout.pop, null),
- LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
- }
- if (mPop.isShowing()) {
- mPop.dismiss();
- }
- }
这里定义了4个按钮来呈现展示效果,一个按钮用来关闭,来看下第三个按钮点击效果,就不一一截图了,大家可以自己试下。
看过我以前这系列博客的朋友就会发现,PopupWindow里面的布局就是抽屉里面用的布局,后面的背景就是上篇博客讲的可延伸图像。为什么用这个呢,我们来看下UC的menu效果
|
评论暂时关闭