android 之popwindow 小结

来源:互联网 发布:云计算行业发现趋势 编辑:程序博客网 时间:2024/06/05 04:48

一、首先,我们要大概了解popwindow是什么

 PopupWindow这个类用来实现一个弹出框,可以使用任意布局的View作为其内容,这个弹出框是悬浮在当前activity之上的。

先看效果图

比如说微信的一个界面,


比如说qq的一个界面


二、那么具体怎么来实现这种悬浮的弹出框呢,下面来详细介绍

首先做好要引用的view,也就是圆框圈住的那些

然后在当前界面的activity中加载即可

下面以微信为例,进行讲解

package com.wgm.view;import com.wgm.util.DialogUtil;import android.app.Activity;import android.app.Dialog;import android.content.Intent;import android.graphics.drawable.ColorDrawable;import android.os.Bundle;import android.util.Log;import android.view.LayoutInflater;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup.LayoutParams;import android.widget.Button;import android.widget.ImageButton;import android.widget.LinearLayout;import android.widget.PopupWindow;import android.widget.RelativeLayout;import android.widget.Toast;public class AssnContentActivity extends Activity implements OnClickListener {private ImageButton ibtn_look;//popwindow窗口private PopupWindow mPopupwinow;private View view_pop;private View relay_assncontent_top;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.assncontent);initView();}@Overridepublic void onClick(View v) {if (v == ibtn_look) {if (mPopupwinow == null) {// 新建一个popwindowmPopupwinow = new PopupWindow(view_pop,LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT,true);// 设置popwindow的背景颜色mPopupwinow.setBackgroundDrawable(new ColorDrawable(0xAA000000));/*颜色和不透明度 (alpha) 值以十六进制表示法表示。任何一种颜色的值范围都是 0 到 255(00 到 ff)。对于 alpha,00 表示完全透明,ff 表示完全不透明。表达式顺序是“aabbggrr”,其中“aa=alpha”(00 到 ff);“bb=blue”(00 到 ff);“gg=green”(00 到 ff);“rr=red”(00 到 ff)。例如,如果您希望对某叠加层应用不透明度为 50% 的蓝色,则应指定以下值:7fff0000 */}// 设置popwindow的位置relay_assncontent_top:为微信右上角+号view,居于+号下方mPopupwinow.showAsDropDown(relay_assncontent_top, 0, 0);mPopupwinow.setFocusable(true);// menu菜单获得焦点mPopupwinow.setOutsideTouchable(true);// 如果没有获得焦点menu菜单中的控件事件无法响应mPopupwinow.update();return;}}public void initView() {ibtn_look = (ImageButton) findViewById(R.id.assncontent_look);relay_assncontent_top = findViewById(R.id.assncontent_Relay_top);view_pop = LayoutInflater.from(AssnContentActivity.this).inflate(R.layout.assn_top_user, null);ibtn_look.setOnClickListener(this);view_pop.setOnClickListener(this);}}

ibtn_look是右上角的加号按钮

R.layout.assn_top_user就是要引用的view


如果并不想让悬浮的弹出框只在某个位置,而是想让其铺满整个界面,就要用

mPopupwinow.showAtLocation(v,Gravity.LEFT, 0, 0);

关于popwindow位置的一些方法

  • showAsDropDown(anchor);//以触发弹出窗的view为基准,出现在view的正下方,弹出的pop_view左上角正对view的左下角  偏移量默认为0,0
  • showAsDropDown(anchor, xoff, yoff);//有参数的话,就是一view的左下角进行偏移,xoff正的向左,负的向右. yoff没测,也应该是正的向下,负的向上
  • showAtLocation(parent, gravity, x, y);//parent:传你当前Layout的id;  gravity:Gravity.BOTTOM(以屏幕左下角为参照)... 偏移量会以它为基准点 当x y为0,0是出现在底部居中 

如果要响应popwindow里面的按钮事件,先初始化popwindow里的按钮,然后直接监听点击事件

ibtn_close = (ImageButton)view_pop.findViewById(R.id.check_old_pwd_close);


关掉popwindow,使用mPopupwinow.dismiss();方法







0 0
原创粉丝点击