效果图如下所示
image.png
image.png
PopupWindow布局:layout_insurance_list_pop_up.xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/llt_root"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/subtransparent"
android:gravity="bottom"
android:orientation="vertical"
>
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:divider="@null"
android:listSelector="@color/transparent"
android:paddingEnd="@dimen/dimen_10"
android:paddingStart="@dimen/dimen_10"
android:scrollbars="none">
</ListView>
</LinearLayout>
ListView列表Item布局:layout_item_insurance_list.xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dimen_30"
android:layout_marginBottom="@dimen/dimen_30"
>
<TextView
android:layout_gravity="center"
android:paddingTop="@dimen/dimen_15"
android:paddingBottom="@dimen/dimen_15"
android:id="@+id/tv_insurance"
style="@style/text_black_45"
tools:text="@string/app_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
适配器Adapter:InsurancePopupWindowAdapter.java文件
public class InsurancePopupWindowAdapter extends BaseAdapter {
private Context mContext;
private List<SysBean> mData;
private final LayoutInflater inflater;
public InsurancePopupWindowAdapter(Context context,List<SysBean> mData){
this.mContext = context;
this.mData = mData;
inflater = LayoutInflater.from(mContext);
}
@Override
public int getCount() {
return mData != null ? mData.size() : 0;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.layout_item_insurance_list, null);
holder.tvName = (TextView) convertView.findViewById(R.id.tv_insurance);
convertView.setTag(holder);
}else {
holder = (ViewHolder)convertView.getTag();
}
SysBean bean = mData.get(position);
holder.tvName.setText(bean.name);
return convertView;
}
final class ViewHolder{
public TextView tvName;
}
}
调用方式
private void showPopup() {
View view = LayoutInflater.from(this).inflate(R.layout.layout_insurance_list_pop_up,null);//PopupWindow对象
listView = (ListView)view.findViewById(R.id.lv);
View rootView = (LinearLayout)view.findViewById(R.id.llt_root);
listView.setAdapter(adapter);
if (popupWindow != null){
popupWindow = null;
}
//初始化PopupWindow对象
popupWindow=new PopupWindow(view, ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);
popupWindow.setBackgroundDrawable(new ColorDrawable());
// 设置滑入滑出的动画效果
popupWindow.setAnimationStyle(R.style.style_pop_up_window2);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
SysBean bean = sysBeanList.get(i);
if (bean != null){
tvInsurane.setText(!TextUtils.isEmpty(bean.name)?bean.name:"");
}
if (popupWindow != null && popupWindow.isShowing()){
popupWindow.dismiss();
}
}
});
//点击外面让popupwindow消失
rootView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (popupWindow != null && popupWindow.isShowing()){
popupWindow.dismiss();
}
return false;
}
});
//让popupwindow在底部显示
popupWindow.showAtLocation(getWindow().getDecorView(), Gravity.BOTTOM, 0, 0);
}
网友评论