本文实例为大家分享了Android下拉框PopupWindow展示的具体代码,供大家参考,具体内容如下
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"tools:context="com.example.spin.MainActivity" ><EditTextandroid:id="@+id/et_editText"android:layout_width="250dp"android:layout_height="50dp"android:layout_centerHorizontal="true"android:layout_marginTop="10dp"android:text="@string/hello_world" /><ImageView android:id="@+id/down"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/down_arrow"android:layout_alignRight="@id/et_editText"android:layout_marginTop="20dp"android:clickable="true"/></RelativeLayout>
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="wrap_content"android:gravity="center_vertical"android:orientation="horizontal" ><ImageView android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/user"/><TextView android:id="@+id/tv_list_item"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center_horizontal"android:text="100000000"/><ImageViewandroid:id="@+id/delete"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/delete"/></LinearLayout>
代码实现
public class MainActivity extends ActionBarActivity {private EditText et_editText;//编辑框private ImageView down;//下拉按钮private ListView listView;private List<String> numList;private PopupWindow popWin; private Boolean isDown=false;//判断弹窗是否显示 @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); et_editText = (EditText) findViewById(R.id.et_editText);down = (ImageView) findViewById(R.id.down);//创建集合 储存号码numList = new ArrayList<String>();for(int i=0;i<20;i++){numList.add("100000000"+i);} initListView();//对下拉按钮设置监听 当进行点击时 弹出popWindown.setOnClickListener(new OnClickListener() { @Overridepublic void onClick(View v) {if(!isDown){//定义一个popupWindowpopWin=new PopupWindow(MainActivity.this);popWin.setWidth(et_editText.getWidth());//设置宽度 和编辑框的宽度相同popWin.setHeight(200); //设置高度//为popWin填充内容popWin.setContentView(listView);//点击popWin区域之外 自动关闭popWinpopWin.setOutsideTouchable(true);/*** 设置弹出窗口显示的位置* 参数一:相对于参数的位置进行显示 即在编辑框的下面显示* 参数二 三:x y轴的偏移量*/popWin.showAsDropDown(et_editText, 0, 0);isDown=true;}else{popWin.dismiss();isDown=false;}}});}//点击返回按钮@Overridepublic void onBackPressed() {/*** 当用户点击返回按钮时 是整个activity退出 而且给人的感觉是直接退出 窗口可能还是显示状态,为了避免内存泄露,先关闭弹窗 * * 当点击返回按钮时 如果窗口存在且正在显示 则关闭窗口*/if(popWin!=null&&popWin.isShowing()){popWin.dismiss();}super.onBackPressed();}private void initListView() {listView = new ListView(this);//设置listView的背景listView.setBackgroundResource(R.drawable.listview_background);//设置条目之间的分割线及滚动条不可见listView.setDivider(null);listView.setVerticalScrollBarEnabled(false);//设置适配器listView.setAdapter(new MyListAdapter());}private class MyListAdapter extends BaseAdapter{@Overridepublic int getCount() {return numList==null?0:numList.size();}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {ViewHolder holder;if(convertView==null){convertView=View.inflate(getApplicationContext(), R.layout.list_item, null);holder=new ViewHolder();holder.tvNum=(TextView) convertView.findViewById(R.id.tv_list_item);holder.delete=(ImageView) convertView.findViewById(R.id.delete);convertView.setTag(holder);}else{holder=(ViewHolder) convertView.getTag();}holder.tvNum.setText(numList.get(position));//对删除按钮设置监听事件holder.delete.setOnClickListener(new OnClickListener() { @Overridepublic void onClick(View v) {//当点击删除按钮时 删除条目numList.remove(position);//刷新ListViewMyListAdapter.this.notifyDataSetChanged();}});//对条目设置监听事件 点击条目后 将num设置到编辑框中convertView.setOnClickListener(new OnClickListener() { @Overridepublic void onClick(View v) {//点击条目后 将num设置到编辑框中et_editText.setText(numList.get(position));popWin.dismiss();}});return convertView;}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}}private class ViewHolder {TextView tvNum;ImageView delete;}}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VEVB武林网。
新闻热点
疑难解答