Android下拉選擇框之PopupWindow

1.效果圖

 

2.思路分析

1.點擊彈出對話框 popupwindowandroid

2.對popupwindow進行相關設置,popupwindow中設置view爲listviewapp

3.listview中item設置點擊事件ide

4.顯示popupwindow佈局

3.代碼

1.佈局文件

1.activity_main.xmlthis

<?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_listspa

<?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);
        }
    }
}
相關文章
相關標籤/搜索