popupWindow说起来简单,但是使用略麻烦,今天带大家来看看怎么使用,先来看看效果图:

先来看看布局文件吧:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.customwidget3.MainActivity" >

    <EditText
        android:id="@+id/et_number"
        android:layout_width="200dp"
        android:layout_height="wrap_content" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/et_number"
        android:layout_alignRight="@id/et_number"
        android:layout_alignTop="@id/et_number"
        android:background="@drawable/down_arrow"
        android:onClick="myClick" />

</RelativeLayout>

布局文件是一个文本输入框,和一个向下的小三角符号,点击这个小三角,会有提示。有人说这个功能不是直接用android中的下拉列表框就可以了,但是下拉列表框是显示不出这个效果的。

好了,看完主页面布局再看看提示框的布局:

listview_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:orientation="horizontal"
    android:padding="5dp" >

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/user" />

    <TextView
        android:id="@+id/tv_number"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="淮左名都" />

    <ImageView
        android:id="@+id/iv_delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/delete" />

</LinearLayout>

第一个imageview是显示那个人的图像,第二个textview是显示提示文本,第三个imageview是显示后面的×按钮。

MainActivity.java代码,关键地方都已有注释。

public class MainActivity extends Activity {

    private EditText et;
    private ListView listview;
    private List<String> list;
    private PopupWindow pw;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et = (EditText) this.findViewById(R.id.et_number);
        //初始化ListView
        listview = initListView();
    }

    private ListView initListView() {
        ListView lv = new ListView(this);
        //设置listview背景
        lv.setBackgroundResource(R.drawable.listview_background);
        //初始化数据
        list = new ArrayList<String>();
        for(int i = 0;i<20;i++){
            list.add("lenve"+i);
        }
        lv.setAdapter(new MyAdapter());

        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                //点击时把list中的文本赋值给EditText
                et.setText(list.get(position));
                //关闭掉popupWindow
                pw.dismiss();
            }
        });

        return lv;
    }

    /**
     * 主界面中三角符号的点击事件
     * @param v
     */
    public void myClick(View v){
        /**
         * listview表示popupWindow的布局文件
         * et.getWidth()表示popupWindow的宽度
         * 600表示popupWindow的高度
         */
        pw = new PopupWindow(listview, et.getWidth(), 600);
        //点击其他区域关闭pw
        pw.setOutsideTouchable(true);
        pw.setBackgroundDrawable(new BitmapDrawable());

        //使窗体获得焦点事件
        pw.setFocusable(true);

        //显示出popupWindow,表示显示在et下方,第二个0表示x轴的偏移量,第三个0表示y轴的偏移量
        pw.showAsDropDown(et, 0, 0);
    }

    //数据适配器
    private class MyAdapter extends BaseAdapter{

        @Override
        public int getCount() {
            return list.size();
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            if(convertView==null)
                convertView = View.inflate(MainActivity.this, R.layout.listview_item, null);
            TextView tv = (TextView) convertView.findViewById(R.id.tv_number);
            ImageView iv = (ImageView) convertView.findViewById(R.id.iv_delete);
            iv.setOnClickListener(new OnClickListener() {
                /**
                 * 当点击右边的×时,从列表中移除该项
                 */
                @Override
                public void onClick(View v) {
                    list.remove(position);
                    notifyDataSetChanged();
                    if(list.size()==0){
                        pw.dismiss();
                    }
                }
            });
            tv.setText(list.get(position));
            return convertView;
        }

    }
}

本项目完整代码下载,提取码:lp6a

popupWindow使用详解的更多相关文章

  1. PopUpWindow使用详解(二)——进阶及答疑

      相关文章:1.<PopUpWindow使用详解(一)——基本使用>2.<PopUpWindow使用详解(二)——进阶及答疑> 上篇为大家基本讲述了有关PopupWindow ...

  2. Android 高级UI设计笔记19:PopupWindow使用详解

    1. PopupWindow使用 PopupWindow这个类用来实现一个弹出框,可以使用任意布局的View作为其内容,这个弹出框是悬浮在当前activity之上的. 2. PopupWindow使用 ...

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

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

  4. Dialog详解(包括进度条、PopupWindow、自定义view、自定义样式的对话框)

    Dialog详解(包括进度条.PopupWindow.自定义view.自定义样式的对话框)   Android中提供了多种对话框,在实际应用中我们可能会需要修改这些已有的对话框.本实例就是从实际出发, ...

  5. WmS详解(二)之如何理解Window和窗口的关系?基于Android7.0源码

    上篇博客(WmS详解(一)之token到底是什么?基于Android7.0源码)中我们简要介绍了token的作用,这里涉及到的概念非常多,其中出现频率最高的要数Window和窗口这一对搭档了,那么我们 ...

  6. Android Studio 插件开发详解三:翻译插件实战

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78113868 本文出自[赵彦军的博客] 一:概述 如果不了解插件开发基础的同学可以 ...

  7. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  8. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  9. EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解

    前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...

随机推荐

  1. Open Audio Library

    Open Audio Library OPENAL是一个音效API,负责系统和声卡之间的沟通,几乎没有一个API能达到她的全部潜能.由 Creative公司.nvidia公司 和 Loki工作室 发起 ...

  2. java之StringBuffer类详解

    StringBuffer 线程安全的可变字符序列. StringBuffer源码分析(JDK1.6): public final class StringBuffer extends Abstract ...

  3. Whats meaning of “EXPORT_SYMBOL” in Linux kernel code?

    EXPORT_SYMBOL的作用是什么? EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,不用修改内核代码就可以在您的内核模块中直接调用,即使用EXPORT_SYMBOL可以将一 ...

  4. 侧滑SilidingMenu ,ViewPager 和,PagerIndicator 冲突

    今天敲代码过程中发现再ViewPager 页面中禁用的SilidingMenu侧滑菜单突然失效了,那么肯定是添加的PagerIndicator的问题, 然后我发现 把setOnPageChangeLi ...

  5. org.dom4j.DocumentException unknown protocol h

    待解析文件的路径中有空格,把空格去掉就好了

  6. HDU 1027 - Ignatius and the Princess II

    第 m 大的 n 个数全排列 DFS可过 #include <iostream> using namespace std; int n,m; ]; bool flag; ]; void d ...

  7. 制作Ubuntu14.04的Openstack镜像

    下载好Ubuntu官方镜像安装文件:不要使用desktop版,在virtualbox和vm上都安装报错,因为不需要桌面,所有没去管了. 第一步.准备好如下文件: 1.ubuntu-14.04.4-se ...

  8. 免费下载获取Odoo中文开发 指南 手册

    引言 Odoo是一个强大的商业应用开源平台.在此基础上,构建了一套紧密集成的应用程序,涵盖了从CRM到销售到股票和会计的所有业务领域.Odoo有一个动态和不断增长的社区,不断增加功能.连接器和其他商业 ...

  9. 金融量化分析【day111】:Pandas-分组与聚合

    一.分组与聚合 在数据分析中,我们有时需要将数据拆分,在每一个特定的组里进行运算 1.实验数据准备 a = pd.read_csv('601318.csv') a 数据如下: 实验数据 2.示例 df ...

  10. [USACO18DEC]The Cow Gathering

    Description: 给定一棵树,每次删去叶子,有m个限制,分别为(a,b)表示a需要比b先删,为每个点能否成为最后被删的点 Hint: \(n,m \le 10^5\) Solution: 手模 ...