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. react入门----基础语法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 洛谷 4216 BZOJ 4448 [SCOI2015]情报传递

    [题解] 每个情报员的危险值val[i]应该是一个分段函数,前面一段是平行于x轴的横线,后面一段是一次函数.我们可以用fx(t)=t-b[x]表示这个一次函数.每次询问一条链上fx(t)大于c的点的个 ...

  3. 【codeforces 3C】Tic-tac-toe

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 写一个函数判断当前局面是否有人赢. 然后枚举上一个人的棋子下在哪个地方. 然后把他撤回 看看撤回前是不是没人赢然后没撤回之前是不是有人赢了. ...

  4. mybatis写当天 当月的数据 时间段数据https://www.cnblogs.com/xzjf/p/7600533.html

    mybatis写当天 当月的数据 时间段数据----https://www.cnblogs.com/xzjf/p/7600533.html

  5. HDU 5493 Queue

    Queue Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  6. RabbitMQ-rabbitmqctl多机多节点和单机多节点集群搭建(五)

    准备 1.准备3台物理机 我这里通过本地机和2台虚拟模拟我是mac通过(Parallel Desktop 实现) 2.按照签名的liux安装步骤在3台机器都安装rabiitMq 3.将任意一节点的co ...

  7. SQL to MongoDB Mapping Chart

    http://docs.mongodb.org/manual/reference/sql-comparison/ In addition to the charts that follow, you ...

  8. tyvj1271 零式求和

    描述 请考虑一个由1到N(N=3, 4, 5 ... 9)的数字组成的递增数列:1 2 3 ... N.现在请在数列中插入“+”表示加,或者“-”表示减,抑或是“ ”表示空白(例如1-2 3就等于1- ...

  9. 20、Java并发性和多线程-Slipped Conditions

    以下内容转自http://ifeve.com/slipped-conditions/: 所谓Slipped conditions,就是说, 从一个线程检查某一特定条件到该线程操作此条件期间,这个条件已 ...

  10. nginx源代码分析--框架设计 &amp; master-worker进程模型

    Nginx的框架设计-进程模型 在这之前,我们首先澄清几点事实: nginx作为一个高性能server的特点.事实上这也是全部的高性能server的特点,依赖epoll系统调用的高效(高效是相对sel ...