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); } } }