自定义下拉列表与PopupWindow的使用(弹出窗口)
自定义下拉列表之PopupWindow的使用(一个弹出窗口,可以用来显示任意视图。出现的弹出窗口是一个浮动容器的当前活动)
功能:在编辑框中的右边放入一个下拉的图片,点击的时候弹出一个popupWindow,里面显示ListView
Java代码:MainActivity.java
import java.util.ArrayList; import android.os.Bundle; import android.app.Activity; import android.text.TextUtils; import android.view.Menu; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.ListView; import android.widget.PopupWindow; import android.widget.TextView; import android.widget.Toast; //自定义下拉列表之PopupWindow的使用(一个弹出窗口,可以用来显示任意视图。出现的弹出窗口是一个浮动容器的当前活动) public class MainActivity extends Activity { private EditText edit; private ImageButton imgbtn; private ListView listView; private ArrayList<String> datas; private PopupWindow popup; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); edit = (EditText) findViewById(R.id.editText); imgbtn = (ImageButton) findViewById(R.id.imagebut); imgbtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { System.out.println("图片按钮"); popupWindow(); } }); listView = new ListView(this); datas = new ArrayList<String>(); for (int i = 0; i < 15; i++) { datas.add("100"+i); } listView.setDivider(null);//设置分割线 listView.setVerticalScrollBarEnabled(false);//不显示滑动条 listView.setAdapter(new MyAdapter()); } /** * 显示窗口 */ private void popupWindow(){ popup = new PopupWindow(this); popup.setWidth(edit.getWidth()); popup.setHeight(200); popup.setContentView(listView);//设置显示内容 popup.setOutsideTouchable(true);//点击PopupWindow以外的区域自动关闭该窗口 popup.showAsDropDown(edit, 0, 0);//显示在edit控件的下面0,0代表偏移量 } //适配器 private class MyAdapter extends BaseAdapter{ @Override public int getCount() { return datas.size(); } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { HolderView holderView=null; if(convertView==null){ convertView=View.inflate(getApplicationContext(), R.layout.list_item,null); holderView=new HolderView(); holderView.text=(TextView) convertView.findViewById(R.id.textView); holderView.delete=(ImageButton) convertView.findViewById(R.id.delete); convertView.setTag(holderView); }else{ holderView=(HolderView) convertView.getTag(); } holderView.text.setText(datas.get(position)); holderView.delete.setImageResource(android.R.drawable.ic_delete); //为listView的每一个子条目设置监听,以区分每个删除按钮 holderView.delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { datas.remove(position);//删除listview的这行数据 MyAdapter.this.notifyDataSetChanged();//更新ListView的数据 } }); //listview的单击事件 convertView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { System.out.println("单机了子条目"); //将单机的这项的文本显示在EditText中,并关闭窗口 edit.setText(datas.get(position)); popup.dismiss();//关闭窗口 } }); return convertView; } class HolderView{//由于这里用户都是同一个人,就省略用户图像的刷新 private TextView text; private ImageButton delete; } } }
布局文件:activity_main.xml
<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=".MainActivity" > <EditText android:layout_width="200dp" android:id="@+id/editText" android:layout_height="50dp" android:hint="自定义下拉列表" /> <ImageButton android:layout_width="30dp" android:layout_height="40dp" android:id="@+id/imagebut" android:layout_margin="5dp" android:layout_alignRight="@id/editText" android:src="@drawable/a"/> </RelativeLayout>
ListView的子布局:list_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="match_parent" android:gravity="center_vertical" android:orientation="horizontal" > <!-- 用户图像 --> <ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <!-- 内容 --> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:textSize="20sp" android:layout_weight="1" android:text="TextView" /> <!-- 删除按钮 --> <ImageButton android:id="@+id/delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/ic_delete" /> </LinearLayout>
效果图: