popwind在Android项目中用到的非常多今天就写一下我在项目中使用的情况,以后方便使用,下面直接上代码。
当点击城市模块的布局时候响应
ll_city.setOnClickListener(this);执行以下操作
//城市 case R.id.ll_city: View view = LayoutInflater.from(this).inflate(R.layout.popup_area, null); lv_city = (ListView) view.findViewById(R.id.lv_area); initPopwind(view,ll_city); CityAdapter cityAdapter = new CityAdapter(this, cityList); lv_city.setAdapter(cityAdapter); //城市点击事件 lv_city.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { popupWindow.dismiss(); CityAdapter adapter = (CityAdapter) (parent.getAdapter()); //根据左侧一级分类选中情况,更新背景色 adapter.setSelectedPosition(position); adapter.notifyDataSetChanged(); tv_city.setText(cityList.get(position).getCity_name()); //请求最新数据 city_id = cityList.get(position).getCity_id(); requestData(province_id, city_id, 0); } }); break;初始化popwind,设置popwind的高度为屏幕的百分之60
private void initPopwind(View view, final View ll_view) { LinearLayout layout = new LinearLayout(PartyActivity.this); WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, (int) (screenHeight * 0.6)); view.setLayoutParams(params); layout.addView(view); layout.setBackgroundColor(Color.argb(60, 0, 0, 0));//设置整个popwind的底色有透明覆盖效果 popupWindow = new PopupWindow(layout, screenWidth, screenHeight); popupWindow.setFocusable(true); popupWindow.setBackgroundDrawable(new BitmapDrawable()); popupWindow.setOutsideTouchable(true); layout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { popupWindow.dismiss(); } }); popupWindow.showAsDropDown(ll_view); }popwind所加载的布局文件,你可以根据自己的需求更改,我需要展示的是城市列表所以写成了listview
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/lv_area" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:divider="@color/liner_color_grag" android:dividerHeight="1dp" android:background="#fff"/> </LinearLayout>城市listview的adapter适配器
/** * 城市的adapter * Created by wss. */ public class CityAdapter extends BaseAdapter{ private Context context; private List<CityBean> list; public CityAdapter(Context context, List<CityBean> list){ this.context = context; this.list = list; } @Override public int getCount() { return list==null?0:list.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView==null){ holder = new ViewHolder(); convertView = LayoutInflater.from(context).inflate(R.layout.right_listview_item, null); holder.nameTV = (TextView) convertView.findViewById(R.id.right_item_name); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } holder.nameTV.setText(list.get(position).getCity_name()); return convertView; } private int selectedPosition = 0; public void setSelectedPosition(int selectedPosition) { this.selectedPosition = selectedPosition; } public int getSelectedPosition() { return selectedPosition; } private class ViewHolder{ TextView nameTV; } }listview条目的布局文件,我这个写的布局很简单,自己可以根据需要写,如果是布局已经定好,条目固定而且数量有限就可以不用使用listview了,也就不需要adapter和条目的布局文件了。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="45dp" > <TextView android:id="@+id/right_item_name" android:layout_width="match_parent" android:layout_height="45dp" android:textSize="14sp" android:textColor="@color/province" android:text="安钢" android:maxLength="10" android:ellipsize="end" android:gravity="center_vertical" android:background="@color/lv_bg" android:paddingLeft="10dp" /> </LinearLayout>popwind代码写完了效果如下:
这个效果需要加上siderbar,下一篇博客会介绍这个功能
popwind效果如上图,希望能帮到大家。