自定义 Popwindow

popwindow 是比较常用的一种控件,为了灵活使用,会自定义 popwidow ,继承 popwindow。

这篇文章主要介绍如何自定义 popwindow ,同时响应 popwindow 中 view 的事件。

1. 定义 MenuPop 继承 popwindow

具体代码如下 :

public class MenuPopwindow extends PopupWindow implements OnClickListener {

	private Context context;

	private View mMenu;
	private TextView tv1, tv2, tv3, tv4;
	public MenuPopwindow(Context context) {
// 这一行代码一定不能忘了
// 不然,初始化的时候会有 NullPointException
		super(context);
		this.context = context;
//view 控件
		initView();
		initData();
	}
	private void initView() {
		LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		mMenu = inflater.inflate(R.layout.menu_main, null);
		tv1 = (TextView) mMenu.findViewById(R.id.menu_1);
		tv2 = (TextView) mMenu.findViewById(R.id.menu_2);
		tv3 = (TextView) mMenu.findViewById(R.id.menu_3);
		tv4 = (TextView) mMenu.findViewById(R.id.menu_4);

		tv1.setOnClickListener(this);
		tv2.setOnClickListener(this);
		tv3.setOnClickListener(this);
		tv4.setOnClickListener(this);
	}

	private void initData() {
// 设置 popwindow 的背景
		this.setContentView(mMenu);
// 设置 width ,height
		this.setWidth(LayoutParams.MATCH_PARENT);
		this.setHeight(LayoutParams.WRAP_CONTENT);
		// 这句话很关键,popwindow 显示的时候 会获取焦点,点击其他区域可以消失
// 如果设置为 false ,点击其他区域不会消失
		this.setFocusable(true);
		// 设置popup的 背景
		 ColorDrawable colorDrawable = new ColorDrawable(0Xb0000000);
		 this.setBackgroundDrawable(colorDrawable);
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.menu_1:
			SetToast.setToastShort(context, "我是大哥");
			break;
		case R.id.menu_2:
			SetToast.setToastShort(context, "我是二哥");
			break;
		case R.id.menu_3:
			SetToast.setToastShort(context, "我是三哥");
			break;
		case R.id.menu_4:
			SetToast.setToastShort(context, "我是小弟");
			break;
		default:
			break;
		}
	}

}

下面是 popwindow 的 使用

在 Activity 的 点击事件中 ,弹出 popwindow

具体代码如下

<pre name="code" class="html">//初始化
MenuPopwindow popwindow = new MenuPopwindow(this);

//在需要弹出 popwindow 的 地方调用
// 第一个参数,弹出的相对 parent view  ,btnView
// 第二个, 位置
// 第三、第四 相对 parent 的 偏移
popwindow.showAtLocation(btnView,Gravity.BOTTOM,0,0);

这样一个简单的 popwindow 就定义好了。显示效果 如下 

时间: 2024-08-25 03:23:28

自定义 Popwindow的相关文章

自定义PopWindow

一.运行效果图 二.工程结构 三.自定义PopWindow 代码: package com.example.custompopdemo; import android.app.Activity; import android.content.Context; import android.graphics.drawable.ColorDrawable; import android.util.DisplayMetrics; import android.view.Gravity; import

自定义 popWindow弹框 工具包

前言:因为Android 没有像IOS一样的ActionSheet,虽然在github上看到有一些类似ActionSheet的库,总觉得不好用,不如自己写一个弹框通用类,样式全部自已来多好. Step 1 废话不多说,直接上代码. public class CustomPopWindow implements PopupWindow.OnDismissListener{ private static final String TAG = "CustomPopWindow"; priva

FBReaderJ学习笔记(二):PopWindow实现自定义阅读页菜单

很少写技术博客,最常用的博客还是Lofter这个:chacePM.非技术博客. 另外基于FBReaderJ本人开发了一个阅读器:悦读.有兴趣的朋友可以去安装看看,支持一下. 以下是实现的菜单截图. MainMenuPopup ConfigPopup 本文使用的是FBReaderJ-2.2.2.1. 注意:本文不涉及具体界面设计,只谈思路. 1.结构 在正式动手改代码前,我们最好先搞清楚几个PopWindow的结构和继承关系,因为FBReaderJ的封装严密,容易走入死胡同. 整个跟popup相关

分别用自定义PopupWindow和自定义Dialog实现下拉菜单

首先看下分别使用PopupWindow和Dialog实现的下拉菜单的不同之处: PopupWindow: Dialog: 由于之前用PopupWindow实现的效果不是太理想,并且弹出下拉菜单的时候背景透明度变化的也不是太好,后来改为Diaolog,项目中其他弹窗也都用的diaolog,便于更改背景透明度,整体看起来也比较统一. 下面把两种实现的方法都记录下来: **第一种:自定义PopupWindow** 首先自定义一个PopWindow: PopWindow.class: public cl

Android仿QQ复制昵称效果

本文同步自http://javaexception.com/archives/76 背景: 这几天做一个复制文本的需求,突然看到QQ上复制昵称跟QQ号的效果,觉得很不错,就想要模仿一波,办法比较简单粗暴,反编译QQ获取了那个.9图片,然后就是用PopWindow实现了. 解决办法: 自定义PopWindow public class CopyContentPopWindow extends PopupWindow { private final View content; TextView tv

Popwindow自定义动画(nexus5不支持暂未解决)

遇到一个问题,先记录一下 PopWindow自定义动画 import android.app.Activity; import android.graphics.drawable.BitmapDrawable; import android.os.Build; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.Gravity; import android.view.LayoutIn

android自定义TextView

Android控件中的TextView控件只有一个输入框,但是为了用于的操作方便我们应该实现一些功能: 1. 可以直接将内容删除的功能按钮 2. 可以记录用户以前输入的数据,同时能够将数据通过下拉显示,点击的时候实现输入 先上图: 下拉的图片没有做,所以和删除的图片使用同一个了,同志们可以直接在xml文件中更换就行了 分析: 肯定要使用自定义view来实现的,我们知道自定义view大概可以分为三类:自绘控件,组合控件,继承控件,我们这里是要进行增强的textView的功能,所以我这里使用的 是组

Android之自定义ListView(一)

PS:自定义View是Android中高手进阶的路线.因此我也打算一步一步的学习.看了鸿洋和郭霖这两位大牛的博客,决定一步一步的学习,循序渐进. 学习内容: 1.自定义View实现ListView的Item左右滑动显示和隐藏弹窗的效果   自定义View其实是在Android学习路上比较难掌握的一个重要点,但是也是高手的必经之路,自定义View分为很多种,我们可以直接继承View,或者是继承他的直接子类或间接子类.ViewGroup,ListView,LinearLayout,Button等等.

Android中自定义下拉样式Spinner

Android中自定义下拉样式Spinner 本文继续介绍android自定义控件系列,自定义Spinner控件的使用. 实现思路 1.定义下拉控件布局(ListView及子控件布局) 2.自定义SpinerPopWindow类 3.定义填充数据的Adapter 效果图 一.定义控件布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http:/