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. SQL学习笔记:表的约束

    目录 NOT NULL约束 INDEX 索引 CHECK 约束 DEFAULT 约束 UNIQUE 约束 PRIMARY KEY 约束 FOREIGN KEY 约束:简单的说,就是创建表的时候,对表或 ...

  2. 1.Zigbee开发学习资源

    http://blog.csdn.net/zhanglianpin/article/details/46907349

  3. PAT 1142 Maximal Clique

    A clique is a subset of vertices of an undirected graph such that every two distinct vertices in the ...

  4. Java8-如何将List转变为逗号分隔的字符串--https://blog.csdn.net/benjaminlee1/article/details/72860845

    Java8-如何将List转变为逗号分隔的字符串 https://blog.csdn.net/benjaminlee1/article/details/72860845

  5. sdibt 1244类似于拓扑排序

    博客:http://blog.csdn.net/mypsq/article/details/39005991 #include<stdio.h> #include<string.h& ...

  6. 控制公司(codevs 2051)

    题目描述 Description 有些公司是其他公司的部分拥有者,因为他们获得了其他公司发行的股票的一部分.例如,福特公司拥有马自达公司12%的股票.据说,如果至少满足了以下三个条件之一,公司A就可以 ...

  7. windows下如何正确使用Jconsole远程连接linux主机上的JVM

    https://www.aliyun.com/jiaocheng/589230.html

  8. [bzoj1607][Usaco2008 Dec]Patting Heads 轻拍牛头_筛法_数学

    Patting Heads 轻拍牛头 bzoj-1607 Usaco-2008 Dec 题目大意:题目链接. 注释:略. 想法:我们发现,位置是没有关系的. 故,我们考虑将权值一样的牛放在一起考虑,c ...

  9. P3383 【模板】线性筛素数 洛谷

    https://www.luogu.org/problem/show?pid=3383#sub 题目描述 如题,给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内) 输入输 ...

  10. Java中DAO/DTO/PO/VO/BO/QO/POJO

    ORM:是Object Relational Mapping(对象关系映射)的缩写. 通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据.在O/R/M的世界里,有两个基本的也是重要的东东需要了 ...