1、 popupWindow 设置大小;

popupWindow = new  PopupWindow(view, ViewGroup.LayoutParams.FILL_PARENT,

ViewGroup.LayoutParams.WRAP_CONTENT);

2、showAtLocation 方法是将popupWindow显示位置 ;

popupWindow.showAtLocation(v, Gravity.CENTER_HORIZONTAL,

                        0,

                        0);

3、PopUpWindow dimiss隐藏,需要 PopupWindow 显示之前设置它的背景不为空:如下面两行代码:

ColorDrawable cd = new ColorDrawable(-0000);

 popupWindow.setBackgroundDrawable(cd);

注意这里设置背景并不会覆盖xml文件定义的背景。

4、 当有popupWindow.setFocusable(false);的时候,说明PopupWindow不能获得焦点,即使设置设置了背景不为空也不能点击外面消失,只能由dismiss()消失;

但是外面的View的事件还是可以触发,back键也可以顺利dismiss掉。当设置为popupWindow.setFocusable(true);的时候,加上下面两行设置背景代码,点击外面和Back键才会消失。

5、 // 这里设置显示PopupWindow之后在外面点击是否有效。如果为false的话,那么点击PopupWindow外面并不会关闭PopupWindow。当然这里很明显只能在Touchable下才能使用。

popupWindow.setOutsideTouchable(true);

下面给出一个简单的使用PopuWindow的实例:

package com.popupwindow;





import android.os.Bundle;

import android.app.Activity;

import android.content.Context;



import android.graphics.drawable.ColorDrawable;

import android.text.SpannableString;

import android.view.Gravity;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.ViewGroup.MarginLayoutParams;

import android.view.ViewGroup;

import android.widget.Button;

import android.widget.PopupWindow;

import android.widget.TextView;



public class MainActivity extends Activity

{

    PopupWindow popupWindow;

    Button imgCall;

    private View view;

    private Context mContext;

    MarginLayoutParams margin;



    @Override

    protected void onCreate(Bundle savedInstanceState)

    {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        mContext = this;

        

        imgCall = (Button) findViewById(R.id.showbutton);

        imgCall.setOnClickListener(new PopupOnClickListener());

        

        margin=new MarginLayoutParams(imgCall.getLayoutParams());

    }



    /**

     * 这个类主要显示PopuWindow,并显示之后对里面的按钮添加监听事件。

     */

    private class PopupOnClickListener implements OnClickListener {

        @Override

        public void onClick(View v) {

            System.out.println("onClick myCursor");

            switch (v.getId()) {

            case R.id.showbutton:

                initPopupWindow();

                // 加上下面两行可以用back键关闭popupwindow,否则必须调用dismiss();

                // 需要顺利让PopUpWindow dimiss;PopUpWindow的背景不能为空。

                // 当有popuWindow.setFocusable(false);的时候,说明PopuWindow不能获得焦点,并不能点击外面消失,只能由dismiss()消失。

                // 当设置为popuWindow.setFocusable(true);的时候,加上下面两行代码才会消失

                // 注意这里添加背景并不会覆盖原来的背景。

                ColorDrawable cd = new ColorDrawable(-0000);

                popupWindow.setBackgroundDrawable(cd);



                popupWindow.showAtLocation(v, Gravity.CENTER_HORIZONTAL,

                        0,

                        0);



                break;

            default:

                break;

            }

        }

    }



    private void initPopupWindow() {

        view = getInfoWindow();//this.getLayoutInflater().inflate(R.layout.custom_info_window, null);

        popupWindow = new PopupWindow(view, ViewGroup.LayoutParams.WRAP_CONTENT,

                ViewGroup.LayoutParams.WRAP_CONTENT);

        // 这里设置显示PopupWindow之后在外面点击是否有效。如果为false的话,那么点击PopupWindow外面并不会关闭PopuWindow。

        popupWindow.setFocusable(true);

        popupWindow.setOutsideTouchable(true);//不能在没有焦点的时候使用



    }



    @Override

    protected void onDestroy() {

        // TODO Auto-generated method stub

        super.onDestroy();

        if (popupWindow.isShowing()) {

            popupWindow.dismiss();

        }

    }

    

    public View getInfoWindow()

    {

        View infoWindow = ((Activity) mContext).getLayoutInflater().inflate(

                R.layout.custom_info_window, null);



        render(infoWindow);

        return infoWindow;

    }

    public void render( View view)

    {

        String title = "我的弹出框";

        TextView titleUi = ((TextView) view.findViewById(R.id.title));

        if(title != null)

        {

            SpannableString titleText = new SpannableString(title);

            titleUi.setText(titleText);



        }

        String snippet = "姓名:李VV\n性别:男\n出生日期:1990/12/12 12:10:05\n所在地:北京";

        TextView snippetUi = ((TextView) view.findViewById(R.id.snippet));

        if(snippet != null)

        {

            SpannableString snippetText = new SpannableString(snippet);

            snippetUi.setText(snippetText);

        }

    }

    

}

具体下载路径:http://download.csdn.net/detail/q610098308/8211811

简单 android popupwindow 实现的更多相关文章

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

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

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

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

  3. Android PopupWindow的使用和分析

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

  4. Android—PopupWindow的简单使用

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

  5. Android 属性动画实现一个简单的PopupWindow

    1.今天看到一个PopupWindow的效果如图: 2.其实就是属性动画的一个简单实用就ObjectAnimator就可以的,想实现更多,更灵活的可以用ValueAnimator 3.直接上代码: p ...

  6. 不得不吐槽的Android PopupWindow的几个痛点(实现带箭头的上下文菜单遇到的坑)

    说到PopupWindow,我个人感觉是又爱又恨,没有深入使用之前总觉得这个东西应该很简单,很好用,但是真正使用PopupWindow实现一些效果的时候总会遇到一些问题,但是即便是人家的api有问题, ...

  7. Android PopupWindow 仿微信弹出效果

    项目中,我须要PopupWindow的时候特别多,这个东西也特别的好使,所以我今天给大家写一款PopupWindow 仿微信弹出效果.这样大家直接拿到项目里就能够用了! 首先让我们先看效果: 那么我首 ...

  8. Android PopupWindow使用方法小结

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

  9. Android popupwindow使用心得(一)

    最近项目中好多地方用到popupwindow,感觉这个控件还是非常重要的.所以把使用心得总结下,废话不多说,直接上代码. public class MainActivity extends Activ ...

随机推荐

  1. 元组tuple类型内置方法

    目录 元组tuple类型内置方法 用途 定义 常用操作+内置方法 优先掌握 存一个值or多个值 有序or无序 可变or不可变 元组tuple类型内置方法 元组是不可变的列表,在定义完成后后面就不可以进 ...

  2. 网络基础——OSI参考模型

    一.OSI/ISO/IOS傻傻分不清楚 ISO 国际标准化组织(International Organization for Standardization)简称ISO,是一个全球性的非政府组织,是国 ...

  3. python之cookbook-day01

    第一章:数据结构和算法 1.1 解压序列赋值给多个变量 >>> p = (4, 5) >>> x, y = p >>> x 4 >>& ...

  4. Discuz 部署,500 – 内部服务器错误。 您查找的资源存在问题,因而无法显示。

    Windows7 IIS 500 – 内部服务器错误解决方案 1.解决方法:打开IIS,在功能视图中找到“错误页”,双击进去后,看最右边的“操作”下的“编辑功能设置…”,将“错误响应”下的“详细错误” ...

  5. zoj 1008 暴力枚举求解dfs+优化

    /* 现将相同的合并计数. 再枚举判断是否符合当cou==n*n是符合就退出 */ #include<stdio.h> #include<string.h> #define N ...

  6. [K/3Cloud]关于"选单"操作

    之前有些人对这块有些疑问,比如: 1.选单操作是否和下推基本一样,都是公用同一套单据转换规则,只不过下推是源单推目标单,选单是目标单去选择源单,最终操作结果一样? 2,我想实现选单的时候,选单列表先通 ...

  7. kuangbin专题最短路 D - Silver Cow Party

    #include<iostream> #include<cstring> #include<algorithm> #include<iomanip> # ...

  8. NOIP2013 提高组合集

    NOIP 2013 提高组 合集 D1 T1 转圈游戏 快速幂裸题 #include <iostream> #include <cstdio> #include <cst ...

  9. [bzoj1072][SCOI2007]排列(状态压缩DP)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1072 分析:看了题解才知道,状态的设计很巧妙,用余数表示,即f[i][j]表示二进制状 ...

  10. Ubuntu 16.04安装Insight实现汇编的调试

    由于Ubuntu从9.04开始就把Insight从APT源中删除,所以使用APT无法安装,而且<Assembly Language Step By Step, for Linux!>此书讲 ...