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. JAVA之文件操作1,2,3,4

    package first_program; import java.io.File; import java.io.IOException; public class num_1v { public ...

  2. led1,1s取反,led2计数10次取反

    1 //利用定时器0 1s,led1取反,利用计数器1,跳10,取反 #include<reg52.h> #define uchar unsigned char #define uint ...

  3. 洛谷 4364 [九省联考2018]IIIDX

    [题解] 一眼可以想到一个类似二叉树后序遍历的贪心做法,然而这个做法在有相同数字的情况下是错误的.最简单的反例就是n=4,d={1,1,1,2},正解是1,1,2,1,而贪心是1,1,1,2. 所以这 ...

  4. noip模拟赛 天天和不可描述

    分析:直接就这么翻肯定是不行的,换一种想法:有括号就是把括号里的字符串倒着输出,如果在括号里又遇到了括号就继续倒着输出,相当于递归. 我们可以用递归直接做,也可以用一层循环搞定,每次从左括号跳到右括号 ...

  5. 母函数(Generating function)详解

    母函数(Generating function)详解 在数学中,某个序列的母函数(Generating function,又称生成函数)是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息.使用 ...

  6. Memcached高可用方案收集(集群及分布式)

    Memcached的集群方案有很多,不止magent一个,但是单靠集群软件去实现高可用感觉还是会缺少一步,最推荐的方案应该是软件加编码去实现高可用,至少能保证站点的99.5%的可运行行,以下是集群的方 ...

  7. Unix stat

    Linux 下有stat命令,可以非常方便的得到一个文件的inode等信息.但是今天在Solaris下使用stat居然没有这个命令.不过没关系,我们可以自己写这个命令,比如: #include < ...

  8. stl空间配置器alloc

    new运算包含两阶段操作: 1) 调用::operator new分配内存     2) 调用构造函数构造对象内容 delete运算包含两阶段操作: 1)调用析构函数将对象析构    2)调用::op ...

  9. 如何基于udp实现tcp协议栈

    http://bbs.csdn.net/topics/280046868 使用套接字完成,按照tcp的方式在一个套接字里维持一个状态机. //定义枚举: enmu state{ CLOSED,//没有 ...

  10. jsp,velocity,freemark页面引擎的比較

    在java领域.表现层技术主要有三种:jsp.freemarker.velocity. jsp是大家最熟悉的技术 长处: 1.功能强大,能够写java代码 2.支持jsp标签(jsp tag) 3.支 ...