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. js之字典操作

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

  2. Prüfer序列和cayley定理

    参考资料: 1.matrix67 <经典证明:Prüfer编码与Cayley公式> 2.百度百科 3.Forget_forever prufer序列总结 4.维基百科 5.dirge的学习 ...

  3. JWT & HMAC-SHA256

    JWT JSON Web Tokens https://jwt.io/ https://en.wikipedia.org/wiki/JSON_Web_Token#Structure HMACSHA25 ...

  4. 阿里maven仓库配置

    修改conf文件夹下的settings.xml文件,添加如下镜像配置: <mirrors> <mirror> <id>alimaven</id> < ...

  5. vim下多行注释与解注释

    1.多行注释 (1)按esc进入命令行模式 (2)按下Ctrl+v,进入区块模式,并使用上下键选择需要注释的多行 (3)按下“I”(大写)键,进入插入模式 (4)输入注释符(“//”或“#”等) (5 ...

  6. Spring Cloud ZooKeeper集成Feign的坑2,服务调用了一次后第二次调用就变成了500,错误:Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.n

    错误如下: 2017-09-19 15:05:24.659 INFO 9986 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refre ...

  7. 表单中的日期 字符串和Javabean中的日期类型的属性自动转换

    搞了一上午的bug最终还是因为自己springMVC的注解不熟悉的原因,特记录. 在实际操作中经常会碰到表单中的日期 字符串和Javabean中的日期类型的属性自动转换, 而springMVC默认不支 ...

  8. jq 笔记

    http://bbs.miaov.com/forum.php?mod=forumdisplay&fid=40 2014.10.10jquery 2.0 不兼容ie 6 7 8,以上更适合做移动 ...

  9. 1.3-动态路由协议EIGRP②

    LAB3:Wildcard Mask in EIGRP (通过反掩码,控制运行EIGRP的接口的范围             作用:控制有哪些接口在运行EIGRP) ~~~~~~~~~~~~~~~~~ ...

  10. Solid Edge如何快速装配,如何截取组装关系式

    我们点击装配体的任意零件,下方将显示他的装配关系,由于一些零件的装配关系是固定的,比如螺栓,肯定要做一个面贴和,再做一个同轴,所以我们可以保存这些固有的步骤,不用再每次挨个点击这些装配关系.   点击 ...