Android(安卓)PopupWindow的使用
16lz
2022-07-24
下面是一个弹出带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>
更多相关文章
- Android(安卓)Activity界面切换添加动画特效
- Android屏幕分辨率正确获取及PX,DPI,DP,SP等的对应关系
- Android系统配置数据库注释(settings.db)
- "Failed to fetch URL https://dl-ssl.google.com/android/repos
- Android(安卓)流式布局FlowLayout(搜索历史),多布局、删除、添加
- android 分辨率及密度详细
- Android屏幕常亮
- Android(安卓)SDK Manager无法更新的解决
- Android(安卓)Activity界面切换添加动画特效