1、下面的主要的类PopWindow
package bai.bai.bai.demo.view;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.BitmapDrawable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import bai.bai.bai.demo.R;
import bai.bai.bai.demo.utils.SharedUtil;
public class PopWindow {
private PopupWindow mPopupWindow;
private ListView mLvNumber;
private List<String> titiles;
/**
* 下拉菜单(PopupWindow)
*/
public void showWindow(View parent, final Activity activity) {
View layoutView;
if (mPopupWindow == null) {
LayoutInflater layoutInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
layoutView = layoutInflater.inflate(R.layout.popup_window_number_list, null);
// 创建一个PopuWidow对象,第二个参数是宽,第三个参数是高
WindowManager windowManager1 = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
int wight = windowManager1.getDefaultDisplay().getWidth() / 2;
int height = windowManager1.getDefaultDisplay().getWidth() * 4 / 3;
mPopupWindow = new PopupWindow(layoutView, wight, height);
mLvNumber = (ListView) layoutView.findViewById(R.id.lv_user_number);
// 加载数据
titiles = new ArrayList<String>();
titiles.add("历史订单");
titiles.add("个人资料");
titiles.add("扫一扫");
titiles.add("转运");
PopWindowAdapter adapter = new PopWindowAdapter(activity, titiles);
mLvNumber.setAdapter(adapter);
}
// 使其聚集
mPopupWindow.setFocusable(true);
// 设置允许在外点击消失
mPopupWindow.setOutsideTouchable(true);
// 这个是为了点击“返回Back”也能使其消失,并且并不会影响你的背景
mPopupWindow.setBackgroundDrawable(new BitmapDrawable());
WindowManager windowManager = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
// 显示的位置为:屏幕的宽度的一半-PopupWindow的高度的一半
int xPos = windowManager.getDefaultDisplay().getWidth() / 2 - mPopupWindow.getWidth() / 2;
Log.i("coder", "xPos:" + xPos);
//第一个参数是控件,第二个是左边的位置,第三个是上边的位置
// mPopupWindow.showAsDropDown(parent, xPos, 0);//指定具体位置
mPopupWindow.showAsDropDown(parent);//在某个布局正下面
mLvNumber.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view,
int position, long id) {
if (mPopupWindow != null) {
mPopupWindow.dismiss();
}
}
});
}
private class PopWindowAdapter extends BaseAdapter {
private List<String> mNumbers;
private Context mContext;
private LayoutInflater inflater;
public PopWindowAdapter(Context context, List<String> numbers) {
this.mContext = context;
this.mNumbers = getNumbers(numbers);
inflater = LayoutInflater.from(context);
}
private List<String> getNumbers(List<String> numbers) {
if (numbers == null) {
numbers = new ArrayList<>();
}
return numbers;
}
@Override
public int getCount() {
return mNumbers.size();
}
@Override
public Object getItem(int position) {
return mNumbers.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.item_popup_window_number_list, null);
holder.tvUserNumber = (TextView) convertView.findViewById(R.id.tv_user_number);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
String number = mNumbers.get(position);
holder.tvUserNumber.setText(number);
return convertView;
}
private class ViewHolder {
private TextView tvUserNumber;
}
}
}
二、需要指定的两个布局(背景、样式什么的自己设置,也可以不加)
1、一是包含list的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="#f30"
android:layout_height="match_parent">
<ListView
android:id="@+id/lv_user_number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_login_input_list_backgroud"
android:paddingBottom="20px"/>
</LinearLayout>
2、二是list里item布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_user_number"
android:layout_width="match_parent"
android:layout_height="100px"
android:text="1111"
android:gravity="center"
android:background="@drawable/select_key_board_ok"/>
</RelativeLayout>
三、引用
PopWindow mPopupWindow = PopWindow()
mPopupWindow.showWindow(mEtUserNumber, this)//这个mEtUserNumber就是你要放在哪个控件的正下面