自定义控件-----popupWindow的使用

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就是你要放在哪个控件的正下面

猜你喜欢

转载自blog.csdn.net/qq_36968707/article/details/81217513
今日推荐