android 之popwindow 小结

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

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

先看效果图

比如说微信的一个界面,

android 之popwindow 小结_第1张图片

比如说qq的一个界面

android 之popwindow 小结_第2张图片

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

首先做好要引用的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;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.assncontent);
		initView();
	}

	@Override
	public void onClick(View v) {
		if (v == ibtn_look) {
			if (mPopupwinow == null) {
				// 新建一个popwindow
				mPopupwinow = 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();方法







你可能感兴趣的:(popwindow)