PopupWindow 是一个可以显示在当前 Activity 之上的浮动容器,这个Demo要实现的功能是,点击布局中的两个按钮,进而控制PopupWindow的显示与消失,代码中有详细的注释首先看一下效果展示:

在上代码之前,先总结一下PopupWindow的用法:
:实例化PopupWindow的对象,三个参数分别对应:填充的布局文件、在当前Activity上所占的宽、高
PopupWindow popupWindow= new PopupWindow(contentView, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
:完成第一步所需要的布局文件,并实例出来
View contentView = mLayoutInflater.inflate(R.layout.pop, null)
:设置PopupWindow 所必备的两个属性
//popupWindow的背景
()popupWindow.setBackgroundDrawable(......);
//popupWindow要显示的位置
()popupWindow.showAtLocation(View parent, int gravity, int x, int y)
接下来,上代码!
popupWindow所要添加的布局文件:popu_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#87cdff"
android:columnCount=""
android:orientation="horizontal"
android:rowCount=""> <ImageView
android:layout_width="65dp"
android:layout_height="65dp"
android:layout_margin="12dp"
android:background="@drawable/icon_bank_gongshang" /> <ImageView
android:layout_width="65dp"
android:layout_height="65dp"
android:layout_margin="12dp"
android:background="@drawable/icon_bank_guangda" /> <ImageView
android:layout_width="65dp"
android:layout_height="65dp"
android:layout_margin="12dp"
android:background="@drawable/icon_bank_jianhang" /> <ImageView
android:layout_width="65dp"
android:layout_height="65dp"
android:layout_margin="12dp"
android:background="@drawable/icon_bank_jiaotong" /> <ImageView
android:layout_width="65dp"
android:layout_height="65dp"
android:layout_margin="12dp"
android:background="@drawable/icon_bank_minsheng" /> <ImageView
android:layout_width="65dp"
android:layout_height="65dp"
android:layout_margin="12dp"
android:background="@drawable/icon_bank_nongye" /> <ImageView
android:layout_width="65dp"
android:layout_height="65dp"
android:layout_margin="12dp"
android:background="@drawable/icon_bank_gongshang" /> <ImageView
android:layout_width="65dp"
android:layout_height="65dp"
android:layout_margin="12dp"
android:background="@drawable/icon_bank_pingan" /> <ImageView
android:layout_width="65dp"
android:layout_height="65dp"
android:layout_margin="12dp"
android:background="@drawable/icon_bank_zhaoshang" /> <ImageView
android:layout_width="65dp"
android:layout_height="65dp"
android:layout_margin="12dp"
android:background="@drawable/icon_bank_youzheng" /> <ImageView
android:layout_width="65dp"
android:layout_height="65dp"
android:layout_margin="12dp"
android:background="@drawable/icon_bank_xingye" /> <ImageView
android:layout_width="65dp"
android:layout_height="65dp"
android:layout_margin="12dp"
android:background="@drawable/icon_bank_pufa" />
</GridLayout>
相当简单的布局,做出来就是这么一个玩意:

MainActivity:
 package com.example.wgh.popupwindow;
import android.graphics.drawable.ColorDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.GridLayout;
import android.widget.PopupWindow; public class MainActivity extends AppCompatActivity { private View mPopView = null;
private Button showPopupWindow = null;
private Button dismissPopupWindow = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); initView();
showPopupWindow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showPopupWindow();
}
});
} private void initView() {
showPopupWindow = (Button) findViewById(R.id.showPopupWindow);
dismissPopupWindow = (Button) findViewById(R.id.dismissPopupWindow);
/**
* 实例popupWindow要添加的布局
*/
mPopView = LayoutInflater.from(this).inflate(R.layout.popu_layout, null);
} private void showPopupWindow() {
/**
* 实例popupWindow对象
*/
PopupWindow popupWindow = new PopupWindow(mPopView, GridLayout.LayoutParams.MATCH_PARENT, GridLayout.LayoutParams.WRAP_CONTENT);
//设置popupWindow中的item可以被点击,这句话是必须要添加的
popupWindow.setFocusable(true);
//设置PopupWindow的背景
//如果不设置背景,会导致无论是点击外部区域还是Back键都无法dismiss掉popupWindow
ColorDrawable dw = new ColorDrawable(0xb0000000);
popupWindow.setBackgroundDrawable(dw);
//设置popupWindow显示的位置
popupWindow.showAtLocation(showPopupWindow, Gravity.BOTTOM,,);
}
}
最后说一下关于popupWindow显示位置的属性设置
 // 相对某个控件的位置(正左下方),无偏移
popupWindow.showAsDropDown(View anchor)
// 相对某个控件的位置,有偏移,xoff 为 X 轴的偏移量,yoff 为 Y 轴的偏移量
popupWindow.showAsDropDown(View anchor, int xoff, int yoff)
// 在父容器的什么位置,gravity 为相对位置,
//如:正中央 Gravity.CENTER、下方 Gravity.BOTTOM、Gravity.RIGHT|Gravity.BOTTOM 右下方等,后面两个参数为 x/y 轴的偏移量。
popupWindow.showAtLocation(View parent, int gravity, int x, int y)

有兴趣的童鞋可以为popupWindow设置上动画,这样在弹出的时候,不会显得那么突兀,哈哈 
如果有什么地方是错误的,请大家批评指正。

Android—PopupWindow的简单使用的更多相关文章

  1. Android PopupWindow的使用技巧(转)

    Android PopupWindow的使用技巧 PopupWindow是Android上自定义弹出窗口,使用起来很方便. PopupWindow的构造函数为 public PopupWindow(V ...

  2. Android PopupWindow使用方法小结

    前几天要用到PopupWindow,一时竟想不起来怎么用,赶紧上网查了查,自己写了个demo,并在此记录一下PopupWindow的用法. 使用场景 PopupWindow,顾名思义,就是弹窗,在很多 ...

  3. Android PopupWindow Dialog 关于 is your activity running 崩溃详解

    Android PopupWindow Dialog 关于 is your activity running 崩溃详解 [TOC] 起因 对于 PopupWindow Dialog 需要 Activi ...

  4. Android PopupWindow的使用和分析

    Android PopupWindow的使用和分析 PopupWindow使用 PopupWindow这个类用来实现一个弹出框,可以使用任意布局的View作为其内容,这个弹出框是悬浮在当前activi ...

  5. Android.mk文件简单分析

    Android.mk文件简单分析 一个Android.mk文件用来向编译系统描写叙述须要编译的源码.详细来说:该文件是GNUMakefile的一小部分.会被编译系统解析一次或多次. 能够在每个Andr ...

  6. IDA 调试 Android 方法及简单的脱壳实现

    IDA 调试 Android 方法及简单的脱壳实现 标签: android原创逆向调试dalvik 2016-05-24 14:24 9286人阅读 评论(3) 收藏 举报 分类: 原创(25) An ...

  7. android EventBus的简单使用

    今天,简单讲讲Android里关于EventBus的使用. 这几天,由于面试的缘故,我听到了很多Android的流行框架,但是之前自己在公司做APP时并没有使用,所以没有了解.于是在网上查找了资料,学 ...

  8. Android 百度地图 简单实现--- 美食搜索

    Android 百度地图 简单实现---  美食 依赖包: 加入 Android 百度依赖包: 1  key:  <!--        开发人员 key --> <meta-dat ...

  9. [Android]RecyclerView的简单演示样例

    去年google的IO上就展示了一个新的ListView.它就是RecyclerView. 下面是官方的说明,我英语能力有限,只是我大概这么理解:RecyclerView会比ListView更具有拓展 ...

随机推荐

  1. JS中Math函数的常用方法

    Math 是数学函数,但又属于对象数据类型 typeof Math => ‘object’ console.dir(Math) 查看Math的所有函数方法. 1,Math.abs() 获取绝对值 ...

  2. TX2中设备树烧写

    将要修改的设备树文件拷贝到下面的目录替换相应的文件 ../64_TX2/Linux_for_Tegra_tx2/kernel/dtb 用micro-USB线连接TX2上的USB OTG口和PC机的US ...

  3. python之控制流习题+代码

    # !/usr/bin/python3 # -*- coding: utf-8 -*- # @Time :2018/11/26 15:32 # @Author :yosef # @Email :wur ...

  4. rest-assured的日志使用介绍

    在许多测试用例当中,为了帮助我们创建正确的断言和发送正确的请求,打印出详细的响应和请求数据是非常有用的.为此我们可以使用rest-assured提供的预定义过滤器或者使用其中的一些快捷方法. 一.请求 ...

  5. D. Minimum Diameter Tree Round #528 (Div. 2)【树】

    一.题面 题目链接 二.分析 该题注意读题的时候有强调边的权值为非负(即可以为0),此题就是求树两个叶子节点之间的最短距离.为了使两个叶子节点之间的距离最短,那么其实就是让每个最后到叶子的那条路径尽量 ...

  6. 《STL详解》读书笔记

    vector 向量容器v.insert(v.begin(), num);//增加v.erase(v.begin(), v.end()); //擦除v.erase(v.begin());reverse( ...

  7. PIE SDK矢量数据的投影转换

    1. 功能简介 目前在地理信息领域中数据包括矢量和栅格两种数据组织形式 ,每一种数据都可以对投影进行转换,目前PIE SDK支持矢量和栅格数据的投影转换功能,下面对矢量数据的投影转换功能进行介绍. 2 ...

  8. Java变量类型,实例变量 与局部变量 静态变量

    实例变量: 实例变量在类中声明,但在方法的外面,构造函数或任何块. 当空间分配给某个对象在堆中,插槽为每个实例变量创建值. 当一个对象与使用关键字 “new” 来创建,在对象被销毁销毁创建的实例变量. ...

  9. ubuntu java开发环境jdk安装

    1. 下载JDK6安装包,我的为32位系统所以选择jdk-6u35-linux-i586.bin 下载地址:http://www.oracle.com/technetwork/java/javase/ ...

  10. CTPN_论文阅读总结

    论文全名:Detecting Text in Natural Image with Connectionist Text Proposal Network 1.摘要 (1)本文提出新型网络CTPN,用 ...