zoukankan      html  css  js  c++  java
  • Android下拉选择框之PopupWindow

    1.效果图

    2.思路分析

    1.点击弹出对话框 popupwindow

    2.对popupwindow进行相关设置,popupwindow中设置view为listview

    3.listview中item设置点击事件

    4.显示popupwindow

    3.代码

    1.布局文件

    1.activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <RelativeLayout
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:layout_marginLeft="20dp"
            >
            <EditText
                android:layout_width="300dp"
                android:layout_height="wrap_content"
                android:id="@+id/tv"
    
                />
            <ImageButton
                android:id="@+id/imgshowdown"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/down_arrow"
                android:padding="4dp"
                android:layout_alignTop="@+id/tv"
                android:background="@null"
                android:layout_alignParentRight="true"
                />
    
        </RelativeLayout>
    
    
    </RelativeLayout>

    2.item_num_list

    <?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="match_parent"
        android:gravity="center_vertical"
        android:padding="3dp"
        >
        <ImageView
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:src="@drawable/ic_default_person"
            android:layout_marginRight="10dp"
            />
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:id="@+id/tv"
            android:layout_weight="1"
            />
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/img"
            android:src="@drawable/delete"
            android:padding="5dp"
            />
    
    
    
    </LinearLayout>

    2.MainActivity

    public class MainActivity extends AppCompatActivity implements View.OnClickListener, AdapterView.OnItemClickListener {
        @BindView(R.id.tv)
        EditText tv;
        @BindView(R.id.imgshowdown)
        ImageButton imgshowdown;
    
        private ListView listView;
        private List<String> datas;
        private MyAdapter adapter;
    
        private PopupWindow popupWindow;
    
        //    private TextView tv;
    //    private
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            ButterKnife.bind(this);
            imgshowdown.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            initListView();//初始化listview
            showpopup();//初始化popupwindow 并显示出来
        }
    
        private void showpopup() {
            if(popupWindow==null){
                popupWindow=new PopupWindow(listView, tv.getWidth(), 300);
                popupWindow.setOutsideTouchable(true);//点击外部消失
    
                //设置背景  不然 setOutsideTouchable(true) 不起作用
                popupWindow.setBackgroundDrawable(new BitmapDrawable());
                popupWindow.setFocusable(true); //设置可获取焦点
            }
            popupWindow.showAsDropDown(tv,0,0);//显示位置
        }
    
        private void initListView() {
            if(datas==null){
                datas=new ArrayList<>();
                for (int i = 0; i <30 ; i++) {
                    datas.add("person"+i);
                }
            }
            if (listView == null) {
                listView = new ListView(this);
                listView.setDividerHeight(0);
                listView.setBackgroundResource(R.drawable.listview_background);
                listView.setOnItemClickListener(this);
                adapter=new MyAdapter();
                listView.setAdapter(adapter);
            }
        }
    
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            tv.setText(datas.get(position));
            popupWindow.dismiss();
        }
    
        //listview 适配器
        class MyAdapter extends BaseAdapter {
    
            @Override
            public int getCount() {
                return datas.size();
            }
    
            @Override
            public Object getItem(int position) {
                return datas.get(position);
            }
    
            @Override
            public long getItemId(int position) {
                return position;
            }
    
            @Override
            public View getView(final int position, View convertView, ViewGroup parent) {
                ViewHolder holder;
                if (convertView == null) {
                    convertView = View.inflate(parent.getContext(), R.layout.item_num_list, null);
                    holder=new ViewHolder(convertView);
    //                holder.tv.setText();
                    convertView.setTag(holder);
    
                }else{
                    holder= (ViewHolder) convertView.getTag();
                }
                holder.tv.setText(datas.get(position));
                holder.img.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        datas.remove(position);
                        notifyDataSetChanged();
                        if(datas.size()==0){
                            popupWindow.dismiss();
                        }
                    }
                });
                return convertView;
            }
    
    
        }
        static class ViewHolder {
            @BindView(R.id.tv)
            TextView tv;
            @BindView(R.id.img)
            ImageView img;
    
            ViewHolder(View view) {
                ButterKnife.bind(this, view);
            }
        }
    }
  • 相关阅读:
    《极客时间--算法面试》--二叉树
    《极客时间--算法面试》-哈希表
    《极客时间-算法面试》-堆栈和队列
    《极客时间-算法面试》-数组和链表
    《极客时间-算法面试》
    《极客时间-算法面试》如何计算复杂度
    查找算法
    排序算法
    AI 期刊会议
    《剑指offer》数组中只出现一次的数字
  • 原文地址:https://www.cnblogs.com/wangjiaghe/p/7844157.html
Copyright © 2011-2022 走看看