zoukankan      html  css  js  c++  java
  • popupWindow使用详解

    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

  • 相关阅读:
    Leetcode Binary Tree Preorder Traversal
    Leetcode Minimum Depth of Binary Tree
    Leetcode 148. Sort List
    Leetcode 61. Rotate List
    Leetcode 86. Partition List
    Leetcode 21. Merge Two Sorted Lists
    Leetcode 143. Reorder List
    J2EE项目应用开发过程中的易错点
    JNDI初认识
    奔腾的代码
  • 原文地址:https://www.cnblogs.com/lenve/p/4606068.html
Copyright © 2011-2022 走看看