下面是一个弹出带ListView和TextView的PopupWindow实例:

importandroid.app.Activity;importandroid.content.Context;importandroid.util.DisplayMetrics;importandroid.util.Log;importandroid.view.LayoutInflater;importandroid.view.MotionEvent;importandroid.view.View;importandroid.widget.AdapterView;importandroid.widget.ListView;importandroid.widget.PopupWindow;importandroid.widget.TextView;importorg.json.JSONArray;importorg.json.JSONException;importorg.json.JSONObject;/***CreatedbySRainon2015/10/15.*<p/>*弹出框*/publicclassPopupWindowUtilsimplementsView.OnClickListener{privatePopupWindowpopupWindow;privateContextcontext;privateViewview;privateTextViewtvClose;privateJSONArrayjsonArray;privateBasicPopuListAdapteradapter;//ListView的适配器publicPopuWindowUtils(Contextcontext,Viewview,JSONArrayjsonArray,intindex){this.context=context;this.view=view;this.jsonArray=jsonArray;initPopuWindow(index);}/***弹出popupwindow**@paramindex弹出框样式标识*/privatevoidinitPopuWindow(finalintindex){ViewcontentView=LayoutInflater.from(context).inflate(R.layout.layout_popupwindow,null);ListViewlistView=(ListView)contentView.findViewById(R.id.lv_files);tvClose=(TextView)contentView.findViewById(R.id.tvClose);tvClose.setVisibility(View.VISIBLE);tvClose.setOnClickListener(this);/**创建PopupWindow实例*getScreenWidth(),(int)(getScreenWidth()*0.6))分别是宽度和高度*/if(popupWindow==null){popupWindow=newPopupWindow(contentView,getScreenWidth(),(int)(getScreenWidth()*0.6));}//自定义view添加触摸事件contentView.setOnTouchListener(newView.OnTouchListener(){@OverridepublicbooleanonTouch(Viewv,MotionEventevent){if(popupWindow!=null&&popupWindow.isShowing()){popupWindow.dismiss();returntrue;}returnfalse;}});switch(index){case1:adapter=newRoutePupuAdapter(context,jsonArray);break;}listView.setAdapter(adapter);listView.setOnItemClickListener(newAdapterView.OnItemClickListener(){@OverridepublicvoidonItemClick(AdapterView<?>parent,Viewview,intposition,longid){try{adapter.setSelectedPosition(position);//更新列表框adapter.notifyDataSetInvalidated();JSONObjectobject=jsonArray.getJSONObject(position);clickFunction(index,object);}catch(JSONExceptione){Log.e("onItemClick",e.toString());}}});popupWindow.setAnimationStyle(R.style.PopupAnimation);popupWindow.setFocusable(true);/**弹出框位置*/popupWindow.showAsDropDown(view,0,-110);//popupWindow.showAtLocation(MainActivity.this.findViewById(R.id.main),Gravity.BOTTOM|Gravi//ty.CENTER_HORIZONTAL,0,0);//设置layout在PopupWindow中显示的位置,从底部弹出}/***根据屏幕宽度设置高度值*/privateintgetScreenWidth(){//获取屏幕宽度DisplayMetricsdm=newDisplayMetrics();doubledensityDpi=dm.density;//获取屏幕信息((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(dm);intscreenWidth=dm.widthPixels;returnscreenWidth;}publicvoidclickFunction(intindex,JSONObjectjson){switch(index){case1:((LocationMapActivity)context).initRoadLines(json);break;}}/***销毁PopupWindow*/publicbooleandismissPopu(){if(popupWindow!=null&&popupWindow.isShowing()){popupWindow.dismiss();returntrue;}returnfalse;}@OverridepublicvoidonClick(Viewv){switch(v.getId()){caseR.id.tvClose:dismissPopu();break;}}}


//这是BasicPopuListAdapter代码,自己的listview中adapter继承它就可以了:importandroid.content.Context;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.BaseAdapter;importorg.json.JSONArray;importorg.json.JSONObject;/***CreatedbySRainon2015/10/20.*<p/>*普通listview适配器*/publicabstractclassBasicPopuListAdapterextendsBaseAdapter{protectedContextcontext;protectedJSONArrayarray;protectedLayoutInflatermInflater;privateintselectedPosition=-1;publicBasicPopuListAdapter(Contextcontext,JSONArrayarray){this.context=context;this.array=array;mInflater=LayoutInflater.from(context);}@OverridepublicintgetCount(){returnarray.length();}@OverridepublicObjectgetItem(intposition){JSONObjectobject=null;try{object=array.getJSONObject(position);}catch(Exceptione){}returnobject;}@OverridepubliclonggetItemId(intposition){returnposition;}@OverridepublicabstractViewgetView(intposition,ViewconvertView,ViewGroupparent);publicabstractvoidsetSelectedPosition(intposition);publicJSONArraygetData(){returnthis.array;}}

这是弹出框的布局文件:

<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/result_view"android:orientation="vertical"><ListViewandroid:id="@+id/lv_files"android:layout_weight="1"android:layout_width="match_parent"android:layout_height="match_parent"/><TextViewandroid:id="@+id/tvClose"android:layout_marginTop="2dp"android:visibility="gone"android:layout_width="match_parent"android:layout_height="45dp"android:background="@color/green"android:gravity="center"android:text="关闭"android:textColor="@color/white"/></LinearLayout>

style中添加:

<stylename="PopupAnimation"mce_bogus="1"parent="android:Animation"><itemname="android:windowEnterAnimation">@anim/dialog_enter</item><itemname="android:windowExitAnimation">@anim/dialog_exit</item></style>

drawable中添加dialog_enter.xml和dialog_exit.xml:

<!--dialog_enter--><?xmlversion="1.0"encoding="utf-8"?><setxmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:duration="500"android:fromYDelta="500"android:toYDelta="0"/></set>
<!--dialog_exit--><?xmlversion="1.0"encoding="utf-8"?><setxmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:duration="500"android:fromYDelta="0"android:toYDelta="500"/></set>


更多相关文章

  1. Android(安卓)Activity界面切换添加动画特效
  2. Android屏幕分辨率正确获取及PX,DPI,DP,SP等的对应关系
  3. Android系统配置数据库注释(settings.db)
  4. "Failed to fetch URL https://dl-ssl.google.com/android/repos
  5. Android(安卓)流式布局FlowLayout(搜索历史),多布局、删除、添加
  6. android 分辨率及密度详细
  7. Android屏幕常亮
  8. Android(安卓)SDK Manager无法更新的解决
  9. Android(安卓)Activity界面切换添加动画特效

随机推荐

  1. Android handler用法详解二(例1)
  2. Android Service的思考(4)
  3. Android lunch分析以及产品分支构建
  4. 七个月Android学习工作总结(随时补充)
  5. android的优点
  6. Android 银联【支付】
  7. 【揭秘】CSDN博客上,超过百万访问量的Andr
  8. Android中WebView使用详解
  9. 写给Android开发的Gradle知识体系
  10. Android 用户界面---XML布局